public void test(int i){
    if(i < 100){
        system.out.println("Hello World" + i);
        test(++i);
        system.out.println("Hello Java" + i);
    }
}

解决方案 »

  1.   

    假如调用test(3),应该输出
    Hello World3
    Hello World4
    Hello World5

    Hello World99
    Hello Java100
    Hello Java99

    Hello Java4应该对吧。
      

  2.   

    三楼的回答是正确的。
    一楼的问题是不对的,显然没有仔细看嘛。调用方法的时候,i的值就赋了嘛。
    lz是想问,为什么结果会是这个样子么?
      

  3.   

    那个递归次数少一点的来说,i=98
    执行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);
      

  4.   

    每次if(i < 100) 这句system.out.println("Hello World" + i);被执行,如果i从0取,就有了0-99个Hello World + i。
    当运行到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
      

  5.   

    我自己听老师分析的时候说是递归应分解为“递”和“归”两个过程,
    上面的两个syso语句分别体现这两个过程,用Fibonacci数列理解这两个过程倒是不难,
    但是总感觉对“归”的过程只是一种抽象的认可,具象起来就有点模糊了,就像这个例子,
    下面的那个syso语句为什么i会倒序,我还是不太理解,希望有人能对i的倒序着重分析下
      

  6.   

    其实很简单,你这样看把递归的部分用要递归的方法替换掉,假设i=98if(i < 100){
      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
    }
      

  7.   

    谢谢kondor大大,分析的很好,kissau也不错。