普通fibonacci :
函数Fibonacci (n ) {
return n 2? n :光纤通道(n-1 )光纤通道(n-2 );
}
调用堆栈应该是这样的。 第五个调用堆栈的长度为8,长度越来越长,越容易引起堆栈溢出。
[Fibonacci(5]) ]
[fibonacci(3(4) Fibonacci )3]
[Fibonacci(3) Fibonacci (2) ) Fibonacci (2) Fibonacci (1) ]
[(Fibonacci )2) Fibonacci(1) [(Fibonacci )1) Fibonacci(1) ) ) Fibonacci ) )1) Fibonacci ) )0)
[Fibonacci(1) Fibonacci )0) Fibonacci )1) Fibonacci )1) Fibonacci )0) Fibonacci )0)
变更为末尾递归方式
函数Fibonacci2(n ) {
vara=arguments.length1arguments [1]!==undefined? arguments[1] : 0;
varb=arguments.length2arguments [2]!==undefined? arguments[2] : 1;
if(n==0
return a
}
returnFibonacci2(n-1,b,a b );
}
调用栈应该一直是一个长度,不知道是否正确?
Fibonacci2(5)==Fibonacci2(5,0,1 ) )。
Fibonacci2(4,1,1 ) )。
Fibonacci2(3,1,2 ) )。
Fibonacci2(2,2,3 ) )。
Fibonacci2(1,3,5 ) )。
Fibonacci2(0,5,8 )=return 5
但是,调用Fibonacci2(10000 )时,将报告uncaughtrangeerror : maximumcallstacksizeexceeded错误。 为什么会这样呢?