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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript - 最大的公约数 - 陷入无限循环相关的知识,希望对你有一定的参考价值。

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

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

有什么指针吗?

答案

你可以用简单的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));

以上是关于JavaScript - 最大的公约数 - 陷入无限循环的主要内容,如果未能解决你的问题,请参考以下文章

201708310807_《算法-Javascript实现最大公约数》

find bugs-求最大公约数和最小公倍数

递归--练习3--noi7592求最大公约数问题

逆解最大公约数与最小公倍数

JavaScript 如何求两个数的最小公倍数

利用递归求两个数字的最大公约数。