Java:为什么我的欧几里得GCD函数返回错误的值



我是编程新手,正在使用Think Java学习Java。我正试着做第六章的练习10。该练习涉及使用欧几里得算法编写用于查找最大公约数(GCD)的递归函数。我想出了两个主意。我不知道为什么我的第二个想法返回了一个错误的值。

这个想法很好:

public class exercise10 {
    public static int gcd(int a, int b) {
        if (b == 0) return a;
        else return gcd(b, a % b);
    }
    public static void main(String[] arguments){
        System.out.println(gcd(36,20));
    }
}

这个想法返回了一个错误的值:

public class exercise10 {
    public static int gcd(int a, int b) {
        if (b > 0) {
            int r = a % b;
            gcd(b, r);
        }
        return a;
    }
    public static void main(String[] arguments){
        System.out.println(gcd(36,20));
    }
}

这不是任何课堂作业的一部分。我只是在用开源的课本自学java。

在Win64计算机上运行java 1.7.0_51版本

BorisTheSpider指出了我的代码有什么问题,但他的帖子不知怎么被删除了。无论如何,他指出我的第二个想法是在递归函数gcd(b, r)前面缺少一个return语句。
public class exercise10 {
    public static int gcd(int a, int b) {
        if (b > 0) {
            int r = a % b;
            gcd(b, r); <--- missing return
        }
        return a;
    }
    public static void main(String[] arguments){
        System.out.println(gcd(36,20));
    }
}

因此,正确的代码应该是:

public class exercise10 {
    public static int gcd(int a, int b) {
        if (b > 0) {
            int r = a % b;
            return gcd(b, r);
        }
        return a;
    }
    public static void main(String[] arguments){
        System.out.println(gcd(36,20));
    }
}

归功于BorisTheSpider

最新更新