日期:2014-05-20  浏览次数:20650 次

---------------->关于递归的疑惑<-----------------
程序段如下:

Java code

public void test1(int i) {
    if(i < 3) {
            System.out.print(i);
            i++;
        test1(i);
        test1(i);
    }
}



输出结果:
0122122

请问为什么在输出012之后还会输出2122?

------解决方案--------------------
你调用了两次
test1(i) ;

public void test1(int i) {
if(i < 3) {
System.out.print(i);
i++;
test1(i); //第一次调用这一步 i = 1 ;所以打印 1 ;然后执行test1(2) ;test1(2) ;--122
test1(i); //第一次调用这一步 i = 1 ;所以打印 1 ;然后执行test1(2) ;test1(2) ;--122
}
------解决方案--------------------
已经说的这么清楚了居然还要求解。。。。

你是不是不理解i的取值问题?i是个局部变量,每次递归调用都会生成新的i,他们之间的值没有保持同步的这种关系。

简化下调用过程,看看你能看懂不?
test1(i=0)
---i++;
---test1(i=1)
------i++;
------test1(i=2)
---------i++;
---------test1(i=3) // if没成立,所以没输出
---------test1(i=3) // if没成立,所以没输出
------test1(i=2)
---------i++;
---------test1(i=3) // if没成立,所以没输出
---------test1(i=3) // if没成立,所以没输出
---test1(1)
------i++;
------test1(i=2)
---------i++;
---------test1(i=3) // if没成立,所以没输出
---------test1(i=3) // if没成立,所以没输出
------test1(i=2)
---------i++;
---------test1(i=3) // if没成立,所以没输出
---------test1(i=3) // if没成立,所以没输出

------解决方案--------------------
Java code

public void test1(int i) {
    if(i < 3) {
            System.out.print(i);//...0
            i++;
        test1(i);//test(1)...1
                   //i++;
                   //test(2)...2
                     //i++;
                     //test(3)...
                     //test(3)...
                   //test(2)...2
                     //i++;
                     //test(3)...
                     //test(3)...
                 
                    


        test1(i);//test(1)...1
                   //i++;
                   //test(2)...2
                     //i++;
                     //test(3)...
                     //test(3)...
                   //test(2)...2
                     //i++;
                     //test(3)...
                     //test(3)...
         
    }
}
希望楼主能看懂。。