欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java递归调用 return的问题

程序员文章站 2022-03-25 18:07:14
最近比较闲,写了个递归调用获取最大公约数,刚开始写错了,但一直不明白错在哪,错误代码如下: public class Demo { public static void main(String[] args) { int gcd = gcd(5, 15); System.out.println(gc ......

最近比较闲,写了个递归调用获取最大公约数,刚开始写错了,但一直不明白错在哪,错误代码如下:

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等于传入的值时才返回

java递归调用 return的问题

后来就写了2个方法来debug

java递归调用 return的问题

找到原因后 修改代码如下:

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

}