【问题标题】:printing duplicate of last two number of fibonacci打印最后两个斐波那契数的副本
【发布时间】:2017-10-13 13:12:31
【问题描述】:

我正在尝试打印最多为 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 );
}

【问题讨论】:

    标签: javascript fibonacci


    【解决方案1】:

    直接删除

    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 开始,但表fib 没有密钥-1。当i 大于1 时,则fib[i-2] 存在且方程的值与之前相同。

    【讨论】:

    • 谢谢,但我意识到代码不适用于 n=1
    【解决方案2】:

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

    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=1
    • @MaxES,这取决于你喜欢哪种风格。根据wikipedia,您可以添加检查并根据需要设置第一个值。
    【解决方案3】:
    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 );
    }
    

    【讨论】:

      【解决方案4】:

      您做错了:您首先在数组中创建第 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);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 2020-03-01
        • 1970-01-01
        相关资源
        最近更新 更多