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

时间:2017-12-17 09:12:52

标签: javascript algorithm while-loop

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

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语句而且我被困在无限循环中。

任何指针?

1 个答案:

答案 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));