java
public int gcd(int x, int y) {
return y > 0 ? gcd(y, x % y) : x;
}
java
public int gcd(int x, int y) {
if (y == 0) return x;
int r = x % y;
return gcd(y, r);
}
上面这两段代码有什么区别吗?没有区别
这个算法处理的是正整数,所以输入如果是负数的话,可能会非预期(死循环)
gcd实现的是欧几里得算法(辗转相除法)(⚠️是非负整数) 基于一个重要的数学性质:两个整数 x 和 y(假设 x >= y)的最大公约数等于 y 和 x % y(即 x 除以 y 的余数)的最大公约数。用数学公式表示就是: gcd(x,y)=gcd(y,x mod y)