JavaScript - 最大的公约数 - 陷入无限循环

问题描述 投票:0回答:1

我正在为计算机编写一个函数,它是多个数字的最大公约数,我在这个无限循环中陷入困境:

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语句而且我陷入无限循环中。

有什么指针吗?

javascript algorithm while-loop
1个回答
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));
© www.soinside.com 2019 - 2024. All rights reserved.