【问题标题】:JavaScript - Large Index Values Lead to Infinite Loops - Not Sure Why?JavaScript - 大索引值导致无限循环 - 不知道为什么?
【发布时间】:2015-11-26 03:24:12
【问题描述】:

我正在处理 Project Euler 问题 (#3) - 最大素因子。

我编写的代码似乎适用于较小的数字,但不适用于较大的数字(请参阅函数的第二次调用)。如果我尝试这样做,它会进入无限循环,我不知道为什么。我试过 JSBin 来测试,它做同样的事情('潜在的无限循环')所以我不知道如何调试这个问题。

不胜感激。

这是我的代码:

  //Prime Checker
  var isPrime = function (num) {
    for(var i = 2; i < num; i++) {
      if(num % i === 0) {
        return false;
      }
    }
    return true;
  }; //end function

  //Largest Prime Factor
  var primeFactor = function (num) {
    var result = 0;
    var temp = 0;
    var primeArr = [];

    for (var i = 2; i <= num; i++) {
      if (num % i === 0) {
        temp = i;
        if (isPrime(temp)) {
          primeArr.push(temp);
        }
      }
    }
    console.log("primeArr: " + primeArr);

    //sort
    primeArr.sort(function(a,b) {
      return b - a;
    });

    result = parseInt(primeArr[0]);
    console.log("result: " + result);        
    return result;
  }; //end function

  primeFactor(13195); //WORKS FINE
  primeFactor(600851475143); //CAUSES INFINITE LOOP

【问题讨论】:

  • 你很可能内存不足,因为这个数字太大了

标签: javascript for-loop infinite-loop


【解决方案1】:

正如其中一个 cmets 所述,如果 JavaScript 在数学方程式中耗尽内存,它有时会导致通过内存链接等事物的无限循环。如果您需要解决方案,有一些 JavaScript 库,例如处理大型数学方程式的 big.js,但我不知道它是否能够帮助解决这个问题。找出答案的唯一方法是尝试。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多