Javascript 为什么这个函数获取的最大公约数不比哪个数大

Javascript 为什么这个函数获取的最大公约数不比哪个数大,javascript,math,Javascript,Math,我正在看公约数函数的例子 我看到这个是用欧几里德算法 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 retur

我正在看公约数函数的例子

我看到这个是用欧几里德算法

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

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

如果
a
小于
b
,那么
a%b
将是
a
。因此,在下一次迭代中,
a
将小于
b


试试看。12%20是12,因为商是0,余数是12。

返回gcd之前添加
console.log(a,b)
,看看发生了什么。是的,我想这是个愚蠢的问题