欧几里得法计算GCD

时间:2020-06-07 10:07:50

标签: java algorithm

public static int GCD(int a, int b) {
    if (b == 0) {
        return a;
    } else {
        int a1 = b;
        int b1 = a % b;
        GCD(a1, b1);
    }
    return 1;
}

}

为什么Euclid's Algo的这种实现(在Java中)总是返回1?如何获得正确答案?

2 个答案:

答案 0 :(得分:1)

您忘记了退货声明。您进行了递归调用,但未使用该值。

public static int GCD(int a, int b) {
    if (b == 0) {
        return a;
    } else {
        int a1 = b;
        int b1 = a % b;
        // return here
        return GCD(a1, b1);
    }
    return 1;
}

尽管如此,您可以像这样简洁地编写它:

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

或一行:

public static int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

答案 1 :(得分:0)

我认为您只是错过了"Rendering",因此您的代码一直运行到最后并返回1。

category