標籤:例子 參數 .com 運算 exe string str stat n+1
遞迴二字顧名思義就是:遞過去,歸回來、所以我索性叫它做有借有還吧。
下面的例子由c而來:
public class Main {
public static void main(String[] args) {
fun(1);
}
public static void fun(int n) {
System.out.printf("1-lexe:%d \n", n); //#1
if (n < 3)
fun(n + 1);
System.out.printf("2-lexe:%d \n", n); //#2
}
}
輸出的結果如下:
1-lexe:1
1-lexe:2
1-lexe:3
2-lexe:3
2-lexe:2
2-lexe:1
流程解讀:
首先, main() 調用了函數 fun(1) ,於是fun(1)中形參 n 的值是 1, 故列印語句 #1 輸出了:1-lexe:1 。
然後,由於 n < 3 ,( 第 2 級 )的fun(n+1)被調用. 此時n+1=2,故列印語句 #1 輸出了:1-lexe:2。
然後,由於 n < 3 ,( 第 3 級 )的fun(n+1)被調用. 此時n+1=3,故列印語句 #1 輸出了:1-lexe:3。
由於此時,n=3 , 不再執行if語句。
然後執行 #2 語句 , 因為此時 n 的值為 3 , 故列印語句 #2 輸出了: 2-lexe:3 。 ---------------------------這時完成了一個“遞過去”
此時函數調用完成
現在函數需要“歸回來” , 回到最後一次調用函數的地方 , 即 n+1=2 的地方 , 故列印語句 #2 輸出了:2-lexe:2。
再返回上一級調用的地方 , n =1 的地方 , 故列印語句 #2 輸出了:2-lexe:1。-----------------------------完成了一個“歸回來“
其實他的”歸回來“的切入點就是函數的調用點 ,擷取此處的參數值 , 一級一級的往外突圍就出來了。
下面附上一個運算的遞迴流程:http://www.cnblogs.com/OldZhao/p/5062582.html
Java遞迴流程