最近比较闲,写了个递归调用获取最大公约数,刚开始写错了,但一直不明白错在哪,错误代码如下:
public class Demo {
public static void main(String[] args) {
int gcd = gcd(5, 15);
System.out.println(gcd);
}
private static int gcd(int a, int b) {
if (b != 0) {
int i = a % b;
a = b;
b = i;
gcd(a, b);
}
return a;
}
}
刚开始一直想不明白为什么当b!=0的时候 不直接return a的值 而是往gcd方法里走,直到a等于传入的值时才返回

后来就写了2个方法来debug

找到原因后 修改代码如下:
public class Demo {
public static void main(String[] args) {
int gcd = gcd(4, 10);
System.out.println(gcd);
}
private static int gcd(int a, int b) {
if (b != 0) {
int i = a % b;
a = b;
b = i;
return gcd(a, b);
}
return a;
}
}
来源:https://www.cnblogs.com/kenute/p/12142319.html