javascript - 为什么这个函数获取最大公约数不比较哪个数字更大
问题描述
我正在查看公约数函数的示例。
我看到这个使用欧几里得算法
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。
推荐阅读
- node.js - node, express - 限制对可下载文件的访问
- gremlin - 如何删除与特定边缘连接的所有节点?
- python - 当我尝试导入模块时在 Jupyter Notebook NameError 中
- html - 防止最后一行中的弹性项目变得比其他弹性项目大
- java - 调整对话框大小时如何调整对话框内的子项大小
- python - 查找熊猫列中值组合的频率
- sas - sas, combine, 未知代码数据集观察
- excel - 安装 VSTO WIX 后 Excel 无法启动
- python - 如何在 Django Chartit 图表的 xAxis 中将 yyyy-mm-dd 截断为 mm-dd?
- regex - 无范围限制的 IP 地址正则表达式