需滿足條件:
1:臨界條件(遞歸出口)
2:遞歸公式
3:總結(jié)條件
當(dāng)邊界條件不滿足時孟辑,遞歸前進哎甲;當(dāng)邊界條件滿足時,遞歸返回饲嗽。
例子代碼:
public static void test2(int n){
System.out.println("1-lexe:"+? n);//#1
if(n <3)
test2(n +1);
System.out.println("2-lexe:"+? n);//#2
}
代碼的結(jié)果:
1-lexe: 1
1-lexe: 2
1-lexe: 3
2-lexe: 3
2-lexe: 2
2-lexe: 1
首先炭玫, main() 調(diào)用了函數(shù) test2(1) ,于是test2(1)中形參 n 的值是 1, 故打印語句 #1 輸出了:1-lexe:1 ?貌虾。
然后吞加,由于 n < 3 ,( 第 2 級 )的test2(n+1)被調(diào)用. 此時n+1=2尽狠,故打印語句 #1 輸出了:1-lexe:2衔憨。
然后,由于 n < 3 袄膏,( 第 3 級 )的test2(n+1)被調(diào)用. 此時n+1=3践图,故打印語句 #1 輸出了:1-lexe:3。
由于此時沉馆,n=3 , 不再執(zhí)行if語句码党。
然后執(zhí)行 #2 語句 , 因為此時 n 的值為 3 斥黑, 故打印語句 #2 輸出了: 2-lexe:3 揖盘。 ?---------------------------這時完成了一個“遞過去”
此時函數(shù)調(diào)用完成
現(xiàn)在函數(shù)需要“歸回來” , 回到最后一次調(diào)用函數(shù)的地方 锌奴, 即 n+1=2 的地方 兽狭, 故打印語句 #2 輸出了:2-lexe:2。
再返回上一級調(diào)用的地方 鹿蜀, n =1 的地方 箕慧, 故打印語句 #2 輸出了:2-lexe:1。-----------------------------完成了一個“歸回來“
其實他的”歸回來“的切入點就是函數(shù)的調(diào)用點 耻姥,獲取此處的參數(shù)值 销钝, 一級一級的往外突圍就出來了有咨。
總結(jié):通過以上結(jié)果可以得出琐簇,遞歸本質(zhì)是串行的,它的工作原理是一個由外到里座享、由里到外串行運行的過程婉商,直到所有的由外到里“遞出去”再由里到外全部“歸回來”,該過程也就結(jié)束了渣叛。