所以我试图重新解决我的问题解决能力,并想重做我的素数因子计算器。代码重构,效率更高等等,因为当我做它时,我是JS的初学者。
在重新创建它时,我遇到了一个相当大的问题 - 无限循环。现在,我已经将我的功能分解为不同的部分并分别调用它们 - 它们工作正常。主要功能本身甚至可以正常工作,只要数量为10或更少。但由于某种原因,每当我调用参数大于10的函数时,就会出现无限循环。
如果答案很明显,我很抱歉,现在已经很晚了。我似乎无法发现它。
普通代码在这里:
var findPrimeFactors = function (number) {
var isPrime = function (number) {
var primes = [];
for (i = 2; i < number; i++) {
if (number % i === 0) {
return false;
}
}
primes.push(number);
return primes;
};
var findFactors = function (number) {
var factors = [];
for (i = 2; i < number; i++) {
if (number % i === 0) {
factors.push(i);
}
}
return factors;
};
var factors = findFactors(number);
var primes = [];
for (i = 0; i < factors.length; i++) {
primes += isPrime(factors[i]);
}
return primes;
};
console.log(findPrimeFactors(10));
代码的小提琴在这里:https://jsfiddle.net/uk26q4ff/
谢谢大家!
答案 0 :(得分:2)
可能你正在点击这个,因为在每个函数中你都没有声明i
所以它在全局范围内使用它。
答案 1 :(得分:1)
我发现了一些错误。
我将如何做到这一点:
var findPrimeFactors = function (number) {
var isPrime = function (number) {
var primes = [];
for (i = 2; i < number; i++) {
if (number % i === 0) {
return false;
}
}
//primes.push(number);
//return primes;
return true;
};
var findFactors = function (number) {
var factors = [];
for (j = 2; j <= number; j++) {
if (number % j === 0) {
factors.push(j);
}
}
return factors;
};
var factors = findFactors(number);
var primes = [];
for (k = 0; k < factors.length; k++) {
//primes += isPrime(factors[k]);
if (isPrime(factors[k])) primes.push(factors[k]);
}
return primes;
};
console.log(findPrimeFactors(37));