打印最后两个斐波那契数的副本

printing duplicate of last two number of fibonacci

我正在尝试打印最多 n 个斐波那契数列。由于某些原因,下面的代码将最后一个数字打印了两次,请帮忙。

function fibonacci(n) {
  let i;
  const fib = [];

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

  for (i=2; i<n; i++) {
    fib[i] = fib[i-2] + fib[i-1];
    fib.push(fib[i]);
  }
  console.log( fib );
}

您需要在索引处分配值 推总和。

function fibonacci(n) {
    let i;
    const fib = [];

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

    for (i = 2; i < n; i++) {
        fib[i] = fib[i - 2] + fib[i - 1]; // either this assignm. or the next line only
        // fib.push(fib[i - 2] + fib[i - 1]);
    }
    return fib;
}

console.log(fibonacci(8));

你做错了:你首先在数组中创建第 n 个元素,然后将相同的元素压入数组,复制它。您不需要 push 命令。

正确的代码是:

    function fibonacci(n) {
      let i;
      const fib = [];
    
      fib[0] = 0;
      fib[1] = 1;
    
      for (i=2; i<n; i++) {
        fib[i] = fib[i-2] + fib[i-1];
      }
      console.log( fib );
    }
    fibonacci(5);

function fibonacci(n) {
  let i;
  const fib = [];

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

  for (i=2; i<n; i++) {
    fib[i] = fib[i-2] + fib[i-1];
    // Remove the following line as you are already assigning the value in the line above.
    //fib.push(fib[i]);
  }
  console.log( fib );
}

只需删除

fib.push(fib[i]);

然后

function fibonacci(n) {
    let i;
    const fib = [];

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


    for (i=2; i<n; i++) {
        fib[i] = fib[i-2] + fib[i-1];
    }
}

fibonacci(7);

给出输出:

[ 0, 1, 1, 2, 3, 5, 8 ]

更新

在发表评论后,我修复了代码,以便 i=1

可以使用它
"use strict";

function fibonacci(n) {
    let i;
    const fib = [];

    fib[0] = 0;

    for (i=1; i<n; i++) {
        fib[i] = ((fib[i-2]!==undefined)?fib[i-2]:1) + fib[i-1];
    }
    console.log(fib)
}

fibonacci(1);
fibonacci(2);
fibonacci(7);

[ 0 ]
[ 0, 1 ]
[ 0, 1, 1, 2, 3, 5, 8 ]

我删除了 fib[1] 的定义,总而言之,仅当 fib[i-2]undefinted 时,才为它们提供 i 元素使用值 1 这意味着只有在i=1时才满足这个条件,因为循环从1开始,而tablefib没有key-1。当 i 大于 1 时,则 fib[i-2] 存在且等式具有先前的值。