java中递归调用_java 中的递归调用的问题

java 中的递归调用的问题

关注:231  答案:2  mip版

解决时间 2021-01-30 06:33

e6cb1a03ad541b3098697807b7bf1798.png

提问者孤酒醉人心

2021-01-29 07:10

public class Recursion1 {

static void hi(int n){

if(n<=0) //x1

return ; //x2

hi(n-1);

System.out.println("你好"+n);

}

public static void main(String[] args) {

hi(10);

}

}

问题:1.X1行的的意思是n小于或者等于零吧,但是hi(10)返回到

调用hi(int n),不就是n等于10吗,条件语句里面的if的意思是n小于等于0

10怎么可能小于等于10了。这不就是条件为假了吗?程序应该不执行的啊!

输出却有,我觉得要这么写条件if(n<=0)却没有输出

2.X2行的返回值类型,一般不是在return后面直接加返回的对象吗

X2行return直接承接下面的递归调用是这个意思是吧?

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家落日海湾

2021-01-29 08:23

首先MAIN函数中调用 hi(10)方法时传到

Recursion1 的hi()中的参数是n=10

if(n<=0) //x1 条件不成立

return ; //x2 这条语句不执行

hi(n-1); 再次调用hi() 参数10-1=9

进入hi()方法中的参数是n=9

同样判断不成立 再次调用hi()方法

。。。。。。。略(基本意思同上)

当n=0时 if(n<=0) //x1 条件成立

return ; //x2 这条语句执行 返回上级操作

上一级操作是什么呢???

当然是 n=1时啦 就是调用hi(1-1);方法时 输出:System.out.println("你好"+n);

然后逐级返回 就会依次把语句打印出来啦

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼阳忆青希

2021-01-29 08:58

public static int method(int n){

if(n==1)

return 1;

else

return n*method(n-1);

}

当n=5时,执行return n*method(n-1);即5*method(4)

在这里调用method(4),这时候n=4

当n=4时执行return n*method(n-1);即4*method(3)

当n=3时执行return n*method(n-1);即3*method(2)

当n=2时执行return n*method(n-1);即2*method(1)

当n=1时执行return 1;返回到其上一次调用method的地方,即返回到2*method(1),即2*1

然后2*1又返回到其上一次调用method的地方,即返回到3*method(2),即3*2*1

就这样一层一层往上返回..

最后就是5*4*3*2*1

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值