Java 计算最大公约数的递归函数

Java 计算最大公约数的递归函数,java,recursion,Java,Recursion,我试图实现一个递归函数来计算两个数字的gcd,但我的代码不起作用,知道怎么了吗 public static int gcd(int a, int b) { if (a == b) { return a; } while (a != b) { if (a > b) { gcd(a - b, b); } else if (b > a) { gcd(a, b - a);

我试图实现一个递归函数来计算两个数字的gcd,但我的代码不起作用,知道怎么了吗

public static int gcd(int a, int b) {
    if (a == b) {
        return a;
    }

    while (a != b) {
        if (a > b) {
            gcd(a - b, b);
        } else if (b > a) {
            gcd(a, b - a);
        }
    }
    return a;
}

如果使用递归,则不需要while循环。只要做:

public static int gcd(int a, int b) {
    if (a == b) {
        return a;
    }

    if (a > b)
        return gcd(a - b, b);

    return gcd(a, b - a);
}

顺便说一句,
while(a!=b)
是一个无限循环,如果到达它。

一般来说,递归策略和
while
循环是互斥的。希望这能作为一个提示。为什么这是一个无限循环?当您再次调用该函数时,参数a和b是否会更改?@Maxim您希望a和b何时更改?您永远不会更改a和b的值。它们是基本数据类型,而不是对象。当您使用较小的值a或b再次调用函数时,它们的值在函数的当前堆栈中不会更改。明白了!多谢各位@马克西姆很高兴这有帮助:)