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;
}
我试图生成一个简单的斐波那契数列,但没有输出。
任何人都可以让我知道出了什么问题吗?
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;
}
我试图生成一个简单的斐波那契数列,但没有输出。
任何人都可以让我知道出了什么问题吗?
您从未声明fib为数组。使用var fib = [];来解决这个问题。
此外,您永远不会修改y变量,也不会使用它。
下面的代码更有意义,此外,它不会创建未使用的变量:
var i;
var fib = []; // Initialize array!
fib[0] = 0;
fib[1] = 1;
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]);
}
根据面试蛋糕问题,序列为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)-'
请注意,尽管此解决方案效率不高。
这是一个简单的函数,它使用函数中的参数而for不是循环体将斐波那契数列迭代到数组中:
fib = function(numMax){
    for(var fibArray = [0,1], i=0,j=1,k=0; k<numMax;i=j,j=x,k++ ){
        x=i+j;
        fibArray.push(x);
    }
    console.log(fibArray);
}
fib(10)
[ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ]
另一个答案是使用 es6生成器函数。
function* fib() {
  var current = a = b = 1;
  yield 1;
  while (true) {
    current = b;
    yield current;
    b = a + b;
    a = current;
  }
}
sequence = fib();
sequence.next(); // 1
sequence.next(); // 1
sequence.next(); // 2
// ...
您应该首先将fib变量声明为数组(例如var fib = []or var fib = new Array()),我认为您对算法有点困惑。
如果使用数组存储斐波那契数列,则不需要其他辅助变量 ( x,y,z) :  
var fib = [0, 1];
for(var i=fib.length; i<10; i++) {
    fib[i] = fib[i-2] + fib[i-1];
}
console.log(fib); 
您也应该考虑递归方法(请注意,这是一个优化版本):
function fib(n, undefined){
    if(fib.cache[n] === undefined){
        fib.cache[n] = fib(n-1) + fib(n-2);
    }
    return fib.cache[n];
}
fib.cache = [0, 1, 1];
然后,在调用 fibonacci 函数后,您就拥有了fib.cache字段中的所有序列:  
fib(1000);
console.log(fib.cache);