javascript - 这个 Fibonacci 解决方案如何在 JavaScript 中工作?

标签 javascript

非常感谢对下面给定解决方案的解释。 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/

相关文章:

javascript - 使用 JQuery 从串联输入值的字符串中搜索并返回 JSON 文件值

javascript - appMobi onClick 不起作用

javascript - 如何在此 jquery 3d slider 中启用播放暂停功能

javascript - 从选择中删除属性倍数

javascript - chart.js donut 逆时针动画

javascript - gapi.client.load 与 google.load

javascript - 如何使用 jquery 滚动到溢出 div 的顶部?

javascript - 如何在 React 应用程序中分离路由

c# - 有什么方法可以更改 JSON 中的日期时间格式吗?

javascript - 使用 d3.js 将 csv 文件中的数据显示到 BarGraph 中