生成斐波那契数列

IT技术 javascript fibonacci
2021-03-10 10:00:17
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;
}

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

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

6个回答

您从未声明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,即斐波那契数列中的前两个数字。
2021-04-16 10:00:17
我会像这样改进它: var sequence = [0,1]; for(var i = 0; i < 10-2; i++){ sequence.push(sequence[i]+sequence[i+1]); } console.log(sequence);
2021-05-01 10:00:17

根据面试蛋糕问题,序列为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)-'

请注意,尽管此解决方案效率不高。

虽然这不成比例
2021-04-19 10:00:17
迄今为止最好的例子......因为递归使用而受到喜爱!
2021-04-23 10:00:17
这个 ascii 艺术是我见过的关于这个 +1 逻辑的最好例子
2021-04-25 10:00:17
无论多么昂贵,请尝试处理前 500 个值!
2021-04-27 10:00:17
这不是问题“我的代码有什么问题?”的答案。这只是一些其他的代码,没有解释。它也是最糟糕的实现之一(使用递归)。
2021-05-12 10:00:17

这是一个简单的函数,它使用函数中的参数而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 ]

fib(0) 返回我 [0,1]。
2021-05-01 10:00:17
fib(10)应该等于0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55.
2021-05-06 10:00:17

另一个答案是使用 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
// ...
我认为它应该从 0
2021-04-16 10:00:17

您应该首先将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);