【发布时间】:2021-07-01 11:56:18
【问题描述】:
所以我想创建一个递归函数,将一系列数字推入数组中。 所以我做了以下事情:
function rangeOfNumbers(startNum, endNum) {
let arr = [];
if (startNum != endNum) {
rangeOfNumbers(startNum++, endNum);
arr.push(startNum);
} else {
arr.push(endNum);
}
return arr;
};
console.log(rangeOfNumbers(1, 5));
所以我认为应该工作的方式是,在每次迭代中 startNum 应该是 +1 并且应该被推入数组内部,并且当 startNum 在这种情况下达到 endNum 的值 5 时,我们应该推 endNum 并结束递归,为什么是我的逻辑有问题,因为现在发生的事情是我的函数超过了最大调用堆栈。
我尝试的另一件事是:
function rangeOfNumbers(startNum, endNum) {
let arr = [];
if (startNum == endNum) {
return arr.push(endNum);
} else {
rangeOfNumbers(startNum++, endNum);
arr.push(startNum);
}
return arr;
};
仍然超出调用堆栈,为什么会这样? :(
【问题讨论】:
-
请注意
startNum++返回原始数字,如果您想要增加的数字,您需要使用++startNum或只需执行startNum + 1 -
startNum++ 如何返回原始数字?它不应该增加它吗?
-
它确实增加了值,但返回了原始值。你可以了解更多over at MDN。描述告诉你的区别比我做得更好。
-
哦,天哪,我现在怎么知道这个 :D 这是一个非常有价值的答案,非常感谢!!!
-
为什么要使用递归呢?为什么不是一个简单的循环?这像是编写递归函数的练习吗?
标签: javascript arrays recursion