尾递归和斐波纳契

qwe*_*ymk 7 javascript recursion fibonacci

我在看这个网站:http://rosettacode.org/wiki/Fibonacci_sequence#JavaScript并看到了这个程序:

function fib(n) {
  return function(n,a,b) {
    return n>0 ? arguments.callee(n-1,b,a+b) : a;
  }(n,0,1);
}
Run Code Online (Sandbox Code Playgroud)

这是如何工作的,这两个参数(a和b)有什么帮助.我追踪它仍然无法弄清楚它是如何工作的

zw3*_*324 9

function(n,a,b),n作为倒数计数器,并a b存储两个连续的斐波纳契数,用于计算下一个,所以当n达到0时,你有a第n + 1个斐波纳契数(因为真正的斐波纳契有两个1作为开头) ).

例如,n = 4:

n  a  b
4  0  1
3  1  2
2  2  3
1  3  5
0  5  8
Run Code Online (Sandbox Code Playgroud)

如您所见,a和b的值始终等于Fibonacci数.此外,这与功能编程非常相似(如网站所述的Scheme程序员).