【问题标题】:Chrome console got crashed by using i-- instead of i-1Chrome 控制台因使用 i-- 而不是 i-1 而崩溃
【发布时间】:2020-08-24 10:16:41
【问题描述】:

所以每当我使用 i-- 在程序中而不是 i-1 控制台崩溃时,我都会在 javascript 中创建一个关于斐波那契数列查找器的程序做同样的事情,这是我的代码:-

function fibonacciGenerator(n) {
  var output = [];
  if (n === 0) {
    return output;
  } else if (n === 1) {
    output.push(0);
    return output;
  } else if (n === 2) {
    output.push(0, 1);
    return output;
  } else {
    output.push(0, 1);
    for (var i = 1; i <= n - 2; i++) {
      output.push(output[i - 1] + output[i]); // Here I was using i-- which caused crash
    }
    return output;
  }
}

【问题讨论】:

  • 这可能与i-- 返回i 的值有关,并且在下一步执行- 运算符,因此,您的i 的值接收-1。这由优先运算符发生。在i-1 的情况下,您的for 中收到的值实际上是i-1

标签: javascript fibonacci


【解决方案1】:

问题在于,for 内部的 i 递减会导致无限循环。但是,如果只使用 i 的值并减去 1,则不会为 i 分配任何新值。

【讨论】:

    【解决方案2】:

    让我们看一下使用i--的for循环:

    for (var i = 1 ; i <= VAL ; i++) {
      i--;
    }
    

    第一次进入循环,i 设置为 1,然后i-- 设置 i 为 0,然后 for 循环将其设置为 1,然后i-- 设置 i 为 0,以此类推。

    你有一个无限循环。

    【讨论】:

    • i - - 被用在数组索引中,它还会将 i 的实际值减 1 吗?顺便说一句,我明白答案感谢您的帮助。
    • @Samst 是的,i-- 将减少 i 的值,无论代码位于何处。修改 for 循环索引通常是一个坏主意(正如您所发现的那样)。
    • 是的,我的老师也在她的解决方案(udemy course)中使用了 (array.length - 1)
    【解决方案3】:

    i-- 等同于 i = i - 1
    i-1 是一个方程,你需要它来等于某个东西

    【讨论】:

      【解决方案4】:

      如果你使用i--,旧的值将用于计算,之后i的值会减1。 但是当您使用 i-1 时,它首先会减少,这就是您在输出数组中查找的值。

      【讨论】:

      • 但是,理论上,--i 应该可以工作吗?我在这里试过,它没有
      • 这里的问题是,这变成了无限循环,因为 i--
      • --我会工作,但仍然是一个糟糕的解决方案,因为我们得到了无限循环
      • 是的,我也注意到了
      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 2022-07-13
      • 2018-01-09
      • 2011-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      相关资源
      最近更新 更多