public void test(int i){
if(i < 100){
system.out.println("Hello World" + i);
test(++i);
system.out.println("Hello Java" + i);
}
}
if(i < 100){
system.out.println("Hello World" + i);
test(++i);
system.out.println("Hello Java" + i);
}
}
Hello World3
Hello World4
Hello World5
Hello World99
Hello Java100
Hello Java99
Hello Java4应该对吧。
一楼的问题是不对的,显然没有仔细看嘛。调用方法的时候,i的值就赋了嘛。
lz是想问,为什么结果会是这个样子么?
执行system.out.println("Hello World" + 98);
++i了
执行递归{
i=99
执行system.out.println("Hello World" + 99);
++i了
执行递归{
i=100 不符合条件了,结束
}
system.out.println("Hello Java" + 100);
}
i=98的时候,调递归的时候++i了 system.out.println("Hello Java" + 99);
当运行到test(++i)时,if(i < 100),那么system.out.println("Hello Java" + i);就会等待下次的调用结果,当if(i < 100)不成立时,就会从最后一条system.out.println("Hello Java" + i);输出,当前i=100,顺序相反,也是100次,所以就有了100-1个Hello Java + i
上面的两个syso语句分别体现这两个过程,用Fibonacci数列理解这两个过程倒是不难,
但是总感觉对“归”的过程只是一种抽象的认可,具象起来就有点模糊了,就像这个例子,
下面的那个syso语句为什么i会倒序,我还是不太理解,希望有人能对i的倒序着重分析下
system.out.println("Hello World" + 98);
++i;
if(i < 100){
system.out.println("Hello World" + 99);
++i
if(i < 100){//不符合,跳出递归了
system.out.println("Hello World" + i);
test(++i);
system.out.println("Hello Java" + i);
}
system.out.println("Hello Java" + 100);
}
system.out.println("Hello Java" + 99);//要注意这个i=99
}