【发布时间】:2020-05-04 19:39:04
【问题描述】:
代码显示了一个递归函数,它接受一个数字,比如 n=5,并返回一个从 n 倒数到 1 的数组,即 [5,4,3,2,1]。
我的困惑就在我们将 n 的数字/值推送到 countArray 之前。我的理解是 countup(n - 1),会生成数字(比如 n=5)5,4,3,2,1...但我不明白它们在哪里/如何存储。我原以为 n 最终会成为它最后定义的值,n=1,或者是一个空白数组。但这不是真的,它们以某种方式都被推入了一个数组,据我所知,在推入之前从未创建/定义过该数组。所以那两条带有 cmets 的线是我需要帮助理解的两条线。
tl;dr: (1) 值 5->1 在被推入数组之前如何存储而不覆盖最终值 1? (2) countArray 在我们推入之前在哪里/如何定义为数组;
function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1); //the storing of 5,4,3,2,1 I don't understand
countArray.push(n); //I don't understand when countArray was defined as an array
return countArray;
}
}
console.log(countup(5)); // [ 1, 2, 3, 4, 5 ]
编辑:这篇文章的标题可能需要更改为数组而不是变量等。
【问题讨论】:
-
return [];是它被声明为数组的位置。 -
生成数字然后声明数组,如果事后数字如何进入数组?
-
“事后”是什么意思?逐行跟踪函数的工作原理,您会发现
return [];是定义和返回数组的位置。这发生在 推送之前。 -
我的意思是 else 语句运行并生成一个 5...4...3...2...1.. 然后是一个数组。如果数组是在所有这些数字之后定义的,我不明白如何将它们放入数组中。
-
这能回答你的问题吗? Understanding how recursive functions work
标签: javascript recursion