Bra*_*ent 3 javascript recursion fibonacci
试图让我的斐波那契序列使用递归工作,但我遇到了错误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);
Run Code Online (Sandbox Code Playgroud)
console.logs向下的三个正在记录正确的数字,但我仍然得到maximum callstack错误.
mon*_*ish 12
++后缀和前缀表示法的行为不同.
来自MDN:
如果使用postfix,操作符后面的运算符(例如,x ++),则它在递增之前返回值.
如果在操作数之前使用了带运算符的前缀(例如,++ x),则在递增后返回该值.
这意味着count在递增之前总是会传递,从而导致堆栈溢出.
要解决您的问题,请更改
return genFib(count++, limit, pushFibNo(fibArray));
Run Code Online (Sandbox Code Playgroud)
至
return genFib(++count, limit, pushFibNo(fibArray));
Run Code Online (Sandbox Code Playgroud)