我在C#中使用遞歸lambda表達式,並發現了兩種方法在Web上執行此操作。一種方法使用fixed point combinator,另一種不使用。在下面的代碼中,f1是使用combinator構建的,而f2是直接定義的。我的問題是,我們是否需要C#中的定點組合器,或者該語言已經提供了我們需要的所有東西,所以我們可以讓它們獨立?我們需要C#中的定點組合器嗎?
class Program
{
static Func<T, T> F<T>(Func<Func<T,T>,Func<T,T>> f)
{
return x => f(F(f))(x);
}
static void Main(string[] args)
{
Func<Func<int,int>,Func<int,int>> f = fac => x => x == 0 ? 1 : x * fac(x - 1);
var f1 = F(f);
Console.WriteLine(f1(5));
Func<int, int> f2 = null;
f2 = x => x == 0 ? 1 : x * f2(x - 1);
Console.WriteLine(f2(5));
}
}
什麼有關的遞歸函數的memoization? – MichaelGG 2009-04-16 23:00:18