呵呵 在下是刚学JAVA的小菜鸟 刚看到了这个程序 不是很明白程序运行的流程 想求高手帮忙告诉下我这个程序的流程
能够细致到行帮助理解最好1 package test4;
2
3 public class Recursion {
4 public int i = -1;
5
6 public Recursion() {
7 i = getValue(17);
8 }
9
10 public int getValue(int iValue) {
11 if (iValue > 100)
12 return iValue;
13 else
14 return getValue(iValue * 2);
15 }
16
17 public static void main(String[] args) {
18 Recursion r = new Recursion();
19 System.out.println(r.i);
20 }
21}

解决方案 »

  1.   

    getValue(17)
        getValue(34)
            getValue(68)
                getValue(136)
                return 136
            return 136
        return 136
    return 136    
      

  2.   

    首先执行main中的Recursion r = new Recursion(); 
    调用构造函数
    public Recursion() { 
       i = getValue(17); 
    }
    从而跳转到getValue(17)去执行
    判断17是否大于100,不是,所以递归执行getValue(34),继续判断34是否大于100,不是,递归执行getValue(68),判断68是否大于100,不是,递归执行getValue(136),判断136是否大于100,是的,返回136,赋值给i,最后执行 System.out.println(r.i);
    打印结果136 
      

  3.   


    栈的入栈与出栈。首先把
    按顺序依次入栈,
    getValue(17)
        getValue(34)
            getValue(68)
                getValue(136)
    然后按顺序依次出栈,每一次出栈都会return一个值,并返还给下一个出栈的,由于下一个出栈的并没有给其进行任何操作,所以值都没有变
    getValue(136)
        getValue(68)
            getValue(34)
                 getValue(17)