JavaScript 使用递归的斐波那契
JavaScript fibonacci using recursion
尝试使用递归使我的斐波那契数列起作用,但 运行 出现错误 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
错误。
if (count === undefined || count === null) {
var count = 0;
}
您已再次声明 "count"。这会覆盖计数参数,并且永远不会调用 if(count === limit)。
++
的行为在后缀和前缀表示法中有所不同。
来自MDN:
If used postfix, with operator after operand (for example, x++), then it returns the value before incrementing.
If used prefix with operator before operand (for example, ++x), then it returns the value after incrementing.
这意味着您总是在递增之前传递 count
,导致堆栈溢出。
要解决您的问题,请更改
return genFib(count++, limit, pushFibNo(fibArray));
至
return genFib(++count, limit, pushFibNo(fibArray));
问题是您在这一行中使用了后增量
return genFib(count++, limit, pushFibNo(fibArray));
那么你总是调用具有相同值的函数 "count",如果你使用预运算符应该有效。
return genFib(++count, limit, pushFibNo(fibArray));
尝试使用递归使我的斐波那契数列起作用,但 运行 出现错误 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
错误。
if (count === undefined || count === null) {
var count = 0;
}
您已再次声明 "count"。这会覆盖计数参数,并且永远不会调用 if(count === limit)。
++
的行为在后缀和前缀表示法中有所不同。
来自MDN:
If used postfix, with operator after operand (for example, x++), then it returns the value before incrementing.
If used prefix with operator before operand (for example, ++x), then it returns the value after incrementing.
这意味着您总是在递增之前传递 count
,导致堆栈溢出。
要解决您的问题,请更改
return genFib(count++, limit, pushFibNo(fibArray));
至
return genFib(++count, limit, pushFibNo(fibArray));
问题是您在这一行中使用了后增量
return genFib(count++, limit, pushFibNo(fibArray));
那么你总是调用具有相同值的函数 "count",如果你使用预运算符应该有效。
return genFib(++count, limit, pushFibNo(fibArray));