我正在尝试使用递归来实现斐波那契数列,但遇到了 maximum callstack exceeded
错误。
代码:
var genFib = function(count, limit, fibArray) {
if (count === undefined || count === null) {
var count = 0;
}
if (fibArray === undefined || fibArray === null) {
var fibArray = [0, 1];
}
if (count === limit) {
console.log(fibArray);
return fibArray;
}
var pushFibNo = function(fibArray) {
fibArray.push(fibArray[fibArray.length - 1] + fibArray[fibArray.length - 2]);
return fibArray;
};
// console.log(count++);
// console.log(limit);
// console.log(pushFibNo(fibArray));
return genFib(count++, limit, pushFibNo(fibArray));
};
genFib(null, 50, null);
页面底部的三个
console.logs
输出了正确的数字,但仍然出现了maximum callstack
错误。
count++
作为参数传入,而必须传入count += 1
。有人能解释一下为什么吗? - user6017908count++
表示代码在递归返回后还有更多的执行,而count +=1
则会在递归之前执行 -- 因此优化器可以在递归中删除调用栈。 - Soren