我希望使用JavaScript来寻找最大公约数。
是否有人之前做过并愿意分享?
这里是一个使用欧几里得算法的递归解决方案。
var gcd = function(a, b) {
if (!b) {
return a;
}
return gcd(b, a % b);
}
我们的基本情况是当b
等于0
时。在这种情况下,我们返回a
。
当我们进行递归时,我们交换输入参数,但将a/b
的余数作为第二个参数传递。
来自维基百科。
递归:
function gcd_rec(a, b) {
if (b) {
return gcd_rec(b, a % b);
} else {
return Math.abs(a);
}
}
迭代:
function gcd(a,b) {
a = Math.abs(a);
b = Math.abs(b);
if (b > a) {var temp = a; a = b; b = temp;}
while (true) {
if (b == 0) return a;
a %= b;
if (a == 0) return b;
b %= a;
}
}
a = Math.abs(a);
(下一行同样适用) - user2428118function egcd(a, b) {
if (a == 0)
return b;
while (b != 0) {
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}
var gcd = function(a,b) { return (!b)?a:gcd(b,a%b); };
。顺便说一句,这是一个不错的解决方案,点赞。 - user4174706