首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:为什么欧几里得GCD函数返回不正确的值

Java:为什么欧几里得GCD函数返回不正确的值
EN

Stack Overflow用户
提问于 2014-10-04 21:22:15
回答 1查看 204关注 0票数 0

我对编程很陌生,我正在使用Think学习Java。我正试着做第六章实践10。本练习涉及使用欧几里德算法编写求最大公因子(GCD)的递归函数。我想出了两个主意。我不知道为什么我的第二个想法返回一个不正确的值。

这个想法工作得很好:

代码语言:javascript
复制
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));
    }
}

此想法返回一个不正确的值:

代码语言:javascript
复制
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版本

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-05 14:10:42

BorisTheSpider指出了我的代码出了什么问题,但他的帖子不知何故被删除了。总之,他指出,我的第二个想法是在递归函数return前面缺少一个gcd(b, r)语句。

代码语言:javascript
复制
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));
    }

}

所以正确的代码应该是:

代码语言:javascript
复制
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.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26197320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档