java 中的递归调用的问题
关注:231 答案:2 mip版
解决时间 2021-01-30 06:33
提问者孤酒醉人心
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直接承接下面的递归调用是这个意思是吧?
最佳答案
二级知识专家落日海湾
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);
然后逐级返回 就会依次把语句打印出来啦
全部回答
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
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看