function Factors(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
我们可以只使用“if”代替“while”吗?
function Factors(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
if(remainder%i===0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
此片段演示了使用
while
和使用 if
之间的区别
function FactorsWhile(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
while ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
function FactorsIf(remainder) {
var factors = [], i;
for (i = 2; i <= remainder; i++) {
if ((remainder % i) === 0) {
factors.push(i);
remainder /= i;
}
}
return factors;
}
console.log("Using WHILE: " + JSON.stringify(FactorsWhile(4)));
console.log("Using IF: " + JSON.stringify(FactorsIf(4)));
原因是因为您使用
while
的功能正在寻找素因数。同时,具有 if
的函数只能找到少数可能是也可能不是素数的因子。我们使用数字 12。如果使用 while
运行该函数,结果数组应该是 [2,2,3],同时,使用 if
语句,您将得到 [2,3]。第一个答案是正确的,因为 2 x 2 x 3 = 12 并且数组中的每个数字都是素数,同时 2 x 3 = 6。
if
语句只会检查此时余数是否能被i
整除。
while
循环将继续将余数除以i
,只要余数% i === 0
(即,remainder
可被i
整除)。它确保捕获i
的所有因素。