如何循环数字序列以根据给定数字连续推送? (斐波那契)

How to loop a sequence of numbers to push continuously based on a given number? (Fibonacci)

我试图深入了解 Fibonacci 的工作原理,所以我尝试了一种不同的方法并制作了我自己的方法,但不知何故它不会循环并最终只推送 1 个而不是 5 个序列。这是我的代码:

function myFibo (n){
    var myArr = [];

    if(n===1){
        myArr=[0];
        console.log(myArr);

    }else if (n===2){
        myArr[0,1];

    }else {
        
        var i = 2;
        while (i<n){
            myArr = [0,1];
            var pos1 = 0;
            var pos2 = 1;
            var sum = myArr[pos1] + myArr[pos2]; //1

            myArr.push(sum);

            pos1++;
            pos2++;
            i++;
        }

    }
    console.log(myArr);

}
    
myFibo(5);

如果你想保留你的功能,试试这个稍微改变一下的代码

function myFibo (n) {
    var myArr = [];

    if (n === 1) {
        myArr = [0];
    } else if (n === 2) {
        myArr = [0, 1];
    }
  
    if (n > 2) {
        myArr = [0, 1];
        var i = 2;
        // var sum = 0;

        while (i < n) {
            var sum = myArr[i-2] + myArr[i-1];
            myArr.push(sum);

            i++;
        }
    }
  
    console.log(myArr);

    return myArr;
}

在此处检查控制台输出 https://codepen.io/vyspiansky/pen/ExKjgoj?editors=0011

您的代码的问题很简单,您是 re-initializing while 循环开始时的跟踪变量:

while (i<n){
    myArr = [0,1];
    var pos1 = 0;
    var pos2 = 1;

您应该在 while 循环之前初始化变量。更新后的代码如下所示:

function myFibo(n) {
  var myArr = [];

  if (n === 1) {
    myArr = [0];
    console.log(myArr);
  } else if (n === 2) {
    myArr[(0, 1)];
  } else {

    var i = 2;
    var pos1 = 0;
    var pos2 = 1;
    myArr = [0, 1];

    while (i < n) {
      var sum = myArr[pos1] + myArr[pos2]; //1
      myArr.push(sum);
      pos1++;
      pos2++;
      i++;
    }
  }
  console.log(myArr);
}

myFibo(5);