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

解决方案 »

  1.   

    第二个System.out.println(n);打印的
      

  2.   

    递归,就是一个方法,方法执行完就要继续执行下条语句。
    你看看我这个程序: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);
     }
    }
    大概是这样理解的。
      

  3.   

    9896
    4948
    2474
    1237这四行都是第二个System.out.println(n);打印出来的。
    希望楼主在学习递归时,拿起笔,一步一步递归分析清楚
      

  4.   

    System.out.println(n);
    if(n <= 5000)
    doubleNum(n*2);
    System.out.println(n);你有两个System.out.println(n);
    第一个是之前打印的,第二个是打印2倍之后再回答打印之前的
      

  5.   


    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
      

  6.   

    当你的条件不满足n<=5000的时候需要返回继续执行原来调用方法
    doubleNum(n*2);
    System.out.println("b:"+n); //这里的代码继续执行9896不满足n<=5000,而返回原来那时n*2=9896,此时打印9896
      

  7.   

    doubleNum();这个方法里有System.out.println("b:"+n); 这句。当递归调用这个doubleNum()方法,这个方法同样有System.out.println("b:"+n);这句