Fibonacci序列仅使用匿名lambdas

时间:2016-01-22 00:05:32

标签: c#

我有一个面试问题,并且完全不知道如何解决它。

我猜测它与递归有关,但我不太熟悉代表实现它。

1 个答案:

答案 0 :(得分:4)

此处的函数Y指的是Y组合子(fixed-point combinator)。您可以在那里阅读更多内容以了解Y组合器的工作原理,但实质上,它可以使用匿名函数进行递归。

要回答这个问题,可以使用Y组合器和匿名函数实现从零开始的Fibonacci:

Func<int, int> fib = Y(f => x => x < 2 ? 1 : f(x - 1) + f(x - 2));

我们在这里给它起了一个名字,但它可以很容易地只使用表达式本身进行评估,即:

int fib10 = Y(f => x => x < 2 ? 1 : f(x - 1) + f(x - 2))(10);

任何递归函数都可以用这种方式实现。例如,factorial只是Func<int, int> fac = Y(f => x => x == 0 ? 1 : x * f(x - 1));