生成斐波那契数列

新手上路,请多包涵
var x = 0;
var y = 1;
var z;

fib[0] = 0;
fib[1] = 1;

for (i = 2; i <= 10; i++) {
  alert(x + y);
  fib[i] = x + y;
  x = y;
  z = y;
}

我正在尝试生成一个简单的斐波那契数列,但没有输出。

任何人都可以让我知道出了什么问题吗?

原文由 methuselah 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 613
2 个回答

您从未将 fib 声明为数组。使用 var fib = []; 解决这个问题。

此外,您永远不会修改 y 变量,也不会使用它。

下面的代码更有意义,此外,它不会创建未使用的变量:

 var i;
 var fib = [0, 1]; // Initialize array!

 for (i = 2; i <= 10; i++) {
 // Next fibonacci number = previous + one before previous
 // Translated to JavaScript:
 fib[i] = fib[i - 2] + fib[i - 1];
 console.log(fib[i]);
 }

原文由 Rob W 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据 Interview Cake 问题,序列 为 0,1,1,2,3,5,8,13,21 。如果是这种情况,则此解决方案有效并且在不使用数组的情况下是递归的。

 function fibonacci(n) {
   return n < 1 ? 0
        : n <= 2 ? 1
        : fibonacci(n - 1) + fibonacci(n - 2)
}

console.log(fibonacci(4))

可以这样想。

    fibonacci(4)   .--------> 2 + 1 = 3
      |          /               |
      '--> fibonacci(3) + fibonacci(2)
            |    ^
            |    '----------- 2 = 1 + 1 <----------.
1st step -> |                     ^                |
            |                     |                |
            '---->  fibonacci(2) -' + fibonacci(1)-'

请注意,此解决方案虽然效率不高。

原文由 Alex Cory 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题