非常感谢对下面给定解决方案的解释。 JavaScript 如何将 s 变量“存储”为数组,因为我认为它会不断被覆盖为 s.push(s[s.length - 1] + s[s.length - 2]);
行直到递归后才被命中?
根据我的理解,JavaScript 从左读到写,然后从上到下,所以它永远不会到达推送线,直到它经历了 s
的所有循环?
它如何存储一个数组?
function fibonacci(n) {
if (n === 1) {
return [0, 1];
} else {
var s = fibonacci(n - 1);
s.push(s[s.length - 1] + s[s.length - 2]);
return s;
}
}
console.log(fibonacci(8));
最佳答案
当您使用 n=8
启动脚本时,将创建变量 s
:
var s = fibonacci(n - 1);
该函数将被递归调用,直到n
等于1。在此步骤中,函数返回包含两个元素的数组:
return [0, 1];
这个数组返回给s
。在接下来的步骤中,数组长度将通过 push()
方法增加:
s.push(s[s.length - 1] + s[s.length - 2]);
于是,函数逐步退出递归。
关于javascript - 这个 Fibonacci 解决方案如何在 JavaScript 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43937372/