java 中的递归调用的问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 19:48:15
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直接承接下面的递归调用是这个意思是吧?

首先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—你好10。main 函数里面调用 hi 方法,参数是 10 ,然后进入 hi 方法,if (10<=0) 这块儿不成立,所以跳出执行 hi(n-1) 这块儿,然后这块儿 hi(10-1) 等于 9 又执行到 hi 方法里,if (9<=0) 还是不成立。一直到 n 等于 0 时,在进入 hi 方法里,这时 if(0<=0) 成立,跳出函数,然后执行当 n 等于 1 的,所调用的 hi 方法,执行输出语句。一直执行 10 次。