我有一个面试问题,并且完全不知道如何解决它。
我猜测它与递归有关,但我不太熟悉代表实现它。
答案 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));
。