【问题标题】:after index 2 i am getting NaN in fibonacci series在索引 2 之后,我在斐波那契数列中得到 NaN
【发布时间】:2020-12-30 06:03:10
【问题描述】:

在我的 javascript 代码中,我在索引 2 之后得到 NaN,比如如果我将 5 作为输入,那么我得到 [0,1,NaN,NaN,NaN],但我不明白为什么我会得到这个 NaN,它表示什么回答

var a = [];

var n = prompt("enter a number: ");

for (var i = 1; i <= n; i++) {
  if (i === 1) {
    a.push(0);
  }

  if (i === 2) {
    a.push(1);
  } else if (i > 2) {
    var num1 = a[i - 1];
    var num2 = a[i - 2];
    var num3 = a[i - 1] + a[i - 2];

    a.push(num3);
  }
}

console.log(a);

【问题讨论】:

  • 调试它else if(i&gt;2) { console.log(i, a[i-1], a[i-2]);(你的shift键也坏了吗?)
  • 您的数组索引与 i 相比相差一个。第一次收到 a[i-1] 时,您会变得不确定。然后,当您尝试添加 num2 时,您会得到 NaN。之后,你总是在做 undefined + NaN。

标签: javascript fibonacci


【解决方案1】:

您的代码存在问题:var num3 = a[i - 1] + a[i - 2];。将其更新为 var num3 = a[i - 2] + a[i - 3]; 即可解决问题,因为您从 1 开始计数器索引变量,但数组位置索引从 0 开始。

将您的代码更新为:

let a = [];
let n = prompt("enter a number: ");

if (n >= 1) {
  a.push(0);
}
if (n >= 2) {
  a.push(1);
}

for (let i = 2; i < n; i++) {
    a.push(a[i - 1] + a[i - 2]);
}

console.log(a);

【讨论】:

    【解决方案2】:

    数组索引从零开始。
    试试这个:

        var a = [];
        
        var n=prompt("enter a number: ");
        
        for (var i = 0; i <= n; i++) {
          if (i < 2) {
            a.push(1);
          } else {
            var num1 = a[i - 1];
            var num2 = a[i - 2];
            var num3 = a[i - 1] + a[i - 2];
        
            a.push(num3);
          }
        }
        
        console.log(a);

    【讨论】:

      【解决方案3】:

      您必须从 i=0i&lt;n 开始,然后将所有索引减少大约 1。

      var a=[];
      
      var n=prompt("enter a number: ");
              for(var i=0;i<n;i++)
              {
                  if(i===0)
                  {
                      a.push(0);
                  }
          
                  if(i===1)
                  {
                      a.push(1);
                  }
                  
                  else if(i>1){
                      var num1=a[i-1];
                      var num2=a[i-2];
                      var num3=a[i-1]+a[i-2];
      
                     a.push(num3);
                  }
              }
         
          console.log(a);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-05
        • 2016-07-23
        • 2011-02-16
        • 2022-11-28
        • 2011-11-27
        • 2018-01-09
        相关资源
        最近更新 更多