java递归_一起来看看这个java递归调用 return的问题

看到一个关于递归的问题,大家感兴趣的可以细品下

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

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

646e81e30c39d4c5ecf0806b707ffae2.png

后来就写了2个方法来debug

b7b068db76d78f6010604ef0397a38c3.png

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

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

欢迎讨论!!!

原文:https://www.cnblogs.com/kenute/p/12142319.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值