首页 > 解决方案 > 为什么这个函数获取最大公约数不比较哪个数字更大

问题描述

我正在查看公约数函数的示例。

我看到这个使用欧几里得算法

var gcd = function(a, b) {  
    if (b == 0) {
        return a;
    }
return gcd(b, a % b);
};

console.log(gcd(126,553443));

但是为什么它不比较在第一次递归调用之间a和之前哪个数字最大呢?b

我的意思是,为什么不

if (a > b)
  return gcd(a, b % a); 
else
  return gcd(b, a % b);

是另一个例子。我没有看到交换发生在哪里

标签: javascriptmath

解决方案


如果a小于ba % b则为a。因此在下一次迭代中,a将小于b

尝试一下。12 % 20 是 12,因为为 0,余数为 12。


推荐阅读