求斐波那契数列的:
var arr = [0,1];
function fob(n){
if (arr[n]) {
return arr[n];
} else {
arr[n] = fob(n-1)+fob(n-2);
return arr[n]
}
}
fob(3);
//Uncaught RangeError: Maximum call stack size exceeded(…)
上面这个报错Uncaught RangeError: Maximum call stack size exceeded(…)
function fib(n){
if (n==0) {
return 0;
} else if (n==1) {
return 1;
} else {
return fib(n-1)+fib(n-2);
}
}
fib(7);
这个就没问题,为什么呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
手机回答,回家改格式
将
改为
死循环!当然会报错!
n会一直减下去,到负无穷
之前大脑短路了。。。原因是arr[0]强制类型转换后成了false,所以会一直减下去。。。
解决方法可以是玉河CC那种,也可以这样:
设置一下n==0时的返回值即可。
这种用数组缓存结果的方法,让计算性能比第二种高了太多。。