混淆产生斐波那契序列

时间:2016-10-10 00:03:22

标签: javascript

(i)当我在代码下面运行时,

var fib = []; 
for(var i=1; i<=10; i++){ 
    if (i === 1) {
      fib[0] = 0;
    } else if (i == 2) {
        fib[1] = 1;
    } else {
        fib[i] = fib[i-2] + fib[i-3];
      console.log(fib[i]);
    }
}

Output: 0 1 undefined 1 NaN NaN

(ii)当我在代码下面运行时,

function generateFib(num) {
  var fib = []; 
  for(var i=1; i <= num; i++) {
    if (i === 1) {
      fib.push(0);
    } else if (i == 2) {
      fib.push(1);
    } else {
      fib.push(fib[i - 2] + fib[i - 3]);
    }
  }
  return fib;
}
generateFib(10);

Output:  0  1   1   2   3   5

我在两个代码之间感到困惑,请你解释一下,谢谢。

1 个答案:

答案 0 :(得分:0)

逐个循环迭代

在第三次迭代中,

fib[2] = fib[2-2] + fib[2-3];fib[2] = fib[0] + fib[-1];

fib[2] = 0 + undefined;

fib[2] = undefined;

在第四次迭代中,

fib[3] = fib[3-2] + fib[3-3];fib[3] = fib[1] + fib[0];

fib[3] = 1 + 0;

在第五次迭代中,

fib[4] = fib[4-2] + fib[4-3];fib[4] = fib[2] + fib[1];

fib[4] = undefined + 1;

fib[4] = NaN;

你可以弄清楚其余部分。

顺便说一句,您可以使用带断点的调试器。

在这种情况下它会非常有用。