public class TestWork {
public static void main(String[] args) {
doubleNum(1237); }
public static void doubleNum(int n)
{
System.out.println(n);
if(n <= 5000)
doubleNum(n*2);
System.out.println(n);
}}结果:
1237
2474
4948
9896
9896//下面这几行怎么来的
4948
2474
1237
public static void main(String[] args) {
doubleNum(1237); }
public static void doubleNum(int n)
{
System.out.println(n);
if(n <= 5000)
doubleNum(n*2);
System.out.println(n);
}}结果:
1237
2474
4948
9896
9896//下面这几行怎么来的
4948
2474
1237
你看看我这个程序:public class aa {
public static void main(String[] args) {
doubleNum1(1237);}
public static void doubleNum1(int n){
System.out.println(n);
if(n <= 5000)
doubleNum2(n*2);
System.out.println(n);
} public static void doubleNum2(int n){
System.out.println(n);
if(n <= 5000)
doubleNum3(n*2);
System.out.println(n);
} public static void doubleNum3(int n){
System.out.println(n);
if(n <= 5000)
doubleNum4(n*2);
System.out.println(n);
} public static void doubleNum4(int n){
System.out.println(n);
if(n <= 5000)
doubleNum4(n*2);
System.out.println(n);
}
}
大概是这样理解的。
4948
2474
1237这四行都是第二个System.out.println(n);打印出来的。
希望楼主在学习递归时,拿起笔,一步一步递归分析清楚
if(n <= 5000)
doubleNum(n*2);
System.out.println(n);你有两个System.out.println(n);
第一个是之前打印的,第二个是打印2倍之后再回答打印之前的
public static void doubleNum(int n){
System.out.println("a:"+n);
if(n <= 5000)
doubleNum(n*2);
System.out.println("b:"+n);
}
a:1237
a:2474
a:4948
a:9896
b:9896
b:4948
b:2474
b:1237
doubleNum(n*2);
System.out.println("b:"+n); //这里的代码继续执行9896不满足n<=5000,而返回原来那时n*2=9896,此时打印9896