首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的循环会变成无限的循环?

为什么我的循环会变成无限的循环?
EN

Stack Overflow用户
提问于 2015-03-16 19:54:30
回答 2查看 78关注 0票数 0

我正在编写一个函数,它将找到一个数字的主要因素。在这个函数中,它有两个循环。一个用于寻找因子,另一个用于从第一个循环中寻找素因子。第二个循环已经无限大了,我还没有在循环中发现任何可能使其无限的地方。我错过了哪里?

代码语言:javascript
复制
function findPrimeFactors(num)
{
 var factors = [];
 var primeFactors = [];
 var currIndex = 0;
 var initFactorsLen;
 var currCompose;
 for (i = 1; i <= num; ++i)
 {
  if (num % i == 0)
  {
   factors.push(i);
  }
 }
 var initFactorsLen = factors.length;
 for (i = 0; i <= initFactorsLen; ++i) 
 {
 //This is infinite loop
  console.log("i is " + i + " and factors are " + factors);
  currCompose = factors[i];
  var primeTest = isPrime(currCompose); 
  if (primeTest == true)
  {
   primeFactors.push(currCompose);
  }
 }
 return primeFactors;
}

function isPrime(num)
{
 var sqrtNum = Math.sqrt(num);
 var ceiledNum = Math.ceil(sqrtNum);
 if (num == 1 || num == 0)
 {
  return false;
 }
 else if (num == 2)
 {
  return true;
 }
 else
 {
  for (i = 2; i <= ceiledNum; ++i)
  {
   if (num % i == 0 && i != num)
   {
    return false;
   }
  }
  return true;
 }
}

我还注意到,有时它并不是无限的,但是它只返回一个素数,尽管它有2。(尝试findPrimeFactors(143))

谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-16 19:58:34

您的i循环变量是全局的,因此两个函数共享i的相同值。

使用var初始化并声明它,如下所示:

代码语言:javascript
复制
for (var i = 0; i <= initFactorsLen; ++i)

在循环语句中声明它的另一种方法是使用其他变量声明它。请注意,可以在逗号分隔的列表中声明所有变量,如下所示:

代码语言:javascript
复制
var factors = [],
    primeFactors = [],
    currIndex = 0,
    initFactorsLen,
    currCompose,
    i;

还要注意,您不需要显式地检查真实性。这是:

代码语言:javascript
复制
var primeTest = isPrime(currCompose); 
if (primeTest == true) {
  primeFactors.push(currCompose);
}

…相当于:

代码语言:javascript
复制
var primeTest = isPrime(currCompose); 
if (primeTest) {
  primeFactors.push(currCompose);
}

…或者更简单地说:

代码语言:javascript
复制
if (isPrime(currCompose)) {
  primeFactors.push(currCompose);
}
票数 4
EN

Stack Overflow用户

发布于 2015-03-16 20:12:35

我不熟悉javascript..。您是否确定您的“i”在您的两个函数中不被循环所共享。如果在函数“isprime”中使用“k”作为索引会发生什么?

算了,10分钟前就解决了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29085784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档