请问为啥会出现这种结果
package demo;
import java.io.*;
import java.util.*;
import java.lang.*;
public class Recall {
static void hi(int n){
if(n<=0)
return;
hi(n-1);
System.out.println("Hello"+ n);
//hi(n-1);
}
public static void main(String[] args){
Recall.hi(5);
}
}
结果为
Hello1
Hello2
Hello3
Hello4
Hello5
我以为是
Hello5
Hello4
Hello3
Hello2
Hello1
问题点数:20、回复次数:9Top
1 楼imA(男的不会,会的不男)回复于 2006-06-02 08:26:08 得分 5
递归,执行0的时候返回,然后弹出堆栈,执行1,然后弹出堆栈,执行2。。。。
依此类推,最后执行5。Top
2 楼skucn()回复于 2006-06-02 08:41:50 得分 0
为啥hi(int n) 方法中hi(n-1)放到System.out.println("Hello"+ n);
会出现截然相反的结果?Top
3 楼skucn()回复于 2006-06-02 08:42:48 得分 0
请问为啥hi(int n) 方法中hi(n-1)放到System.out.println("Hello"+ n)前后
会出现截然相反的结果?
Top
4 楼hudingchen(努力不一定成功,放弃一定失败。)回复于 2006-06-02 09:03:16 得分 15
你写的是递归函数,要清楚调用函数的顺序
h(5)->h(4)->h(3)->h(2)->h(1)->
->System.out.println("Hello"+ 1)
->System.out.println("Hello"+ 2)
->System.out.println("Hello"+ 3)
->System.out.println("Hello"+ 4)
->System.out.println("Hello"+ 5)
Top
5 楼zty_nit()回复于 2006-06-02 09:06:25 得分 0
递归嘛!Top
6 楼skucn()回复于 2006-06-02 09:19:12 得分 0
请问把 hi(int n) 方法中hi(n-1)放到System.out.println("Hello"+ n)就不叫递归了吗?
按照hudingchen(辰辰)的解释程序改成这样
package demo;
import java.io.*;
import java.util.*;
import java.lang.*;
public class Recall {
static void hi(int n){
if(n<=0)
return;
//hi(n-1);
System.out.println("Hello"+ n);
hi(n-1);
}
public static void main(String[] args){
Recall.hi(5);
}
}
结果应该为:
Hello5
Hello4
Hello3
Hello2
Hello1
Hello1
Hello2
Hello3
Hello4
Hello5
不知道理解有没有错误
但结果为
Hello5
Hello4
Hello3
Hello2
Hello1
Top
7 楼skucn()回复于 2006-06-02 09:45:39 得分 0
自己顶一下Top
8 楼xiaofengsuilu()回复于 2006-06-02 10:44:21 得分 0
有道理,顶一下
请教:在递归的时候,那些数据是如何储存的?Top
9 楼hudingchen(努力不一定成功,放弃一定失败。)回复于 2006-06-02 14:01:31 得分 0
to skucn(): 你理解错了,把 hi(int n) 方法中hi(n-1)放到System.out.println("Hello"+ n)叫递归,它的结果就应该是:
Hello5
Hello4
Hello3
Hello2
Hello1
自己设个断点看看
Top




