我正在为计算机编写一个函数,它是多个数字的最大公约数,我在这个无限循环中陷入困境:
const gcd = (...nums) => {
let answer = Math.min.apply(null, nums);
while (answer > 0) {
for (let index in nums) {
if (nums[index] % answer !== 0) {
answer--;
break;
} else if (index === (nums.length-1)){
return answer;
}
}
}
}
gcd(20, 155, 30)
对于我在最后一行的测试用例,我能够达到5,这是正确的答案。但似乎一旦答案达到5,我就无法进入if和else if语句而且我被困在无限循环中。
任何指针?
答案 0 :(得分:2)
您可以使用简单for in
循环替换for
循环。不要使用for in
循环来迭代数组。
const gcd = (...nums) => {
let answer = Math.min.apply(null, nums);
while(answer > 0) {
for (let index = 0; index < nums.length; index++) {
if (nums[index] % answer !== 0) {
answer--;
break;
} else if (index === (nums.length-1)){
return answer;
}
}
}
}
console.log(gcd(20, 155, 30));