【发布时间】:2021-04-04 21:30:39
【问题描述】:
function countdown(n) {
if (n < 1) {
return [];
} else {
const arr = countdown(n - 1);
arr.unshift(n);
return arr;
}
}
console.log(countdown(10));
现在我使用 vs 代码对其进行了调试,它向我展示了在开始时 n=10 时唯一被执行的行是“arr = countdown(n - 1);”行,然后将其存储在调用堆栈中,当 n 最终变为 0 时,函数返回 [] 但不是退出 if else 循环,而是运行 arr.shift(n) for n 从 1 到 10,然后返回数组.我不明白它是如何工作的。
【问题讨论】:
-
您的问题实际上很好地解释了正在发生的事情。我想也许你错过了函数调用有点像洋葱层一样的包裹。所以最里面的调用 (n=0) 有 10 个调用围绕它,当它们开始返回洋葱解包时,外部函数调用依次继续(到下一行)。
-
我认为以下 Q/A 可能会帮助您更好地理解递归,您可以在这里应用相同的概念 - stackoverflow.com/questions/66225803/…
标签: javascript