【狂神說Java學習筆記】階段一JavaSE基礎(七)遞迴
阿新 • • 發佈:2020-08-11
筆記內容:狂神說Java階段一Java基礎視訊P50
狂神說Java視訊連結
目錄
1、遞迴要素
- 遞迴頭:什麼時候不呼叫自身方法。如果沒有頭,將陷入死迴圈。
- 遞迴體:什麼時候需要呼叫自身方法
test.test(); //main中呼叫
public void test(){ //沒有頭會報錯,棧溢位
if(...){return...} //遞迴頭
test(); //遞迴體
}
2、遞迴練習
計算5!
//main public static out println(f(5)); //f(n)方法 public static int f(int n) { if (n == 1) { //因為1沒有辦法再減1了,否則乘出來的結果是0,所以要作為單獨的情況考慮 return 1; }else { return n*f(n-1); } } >>> 120
對於程式碼的理解:
我最開始學遞迴的時候,總覺得是每一次計算出當下的數,再套下一層繼續計算。比如先計算出54=20,再用203,以此類推。但實際上遞迴是先層層呼叫函式,把所有的函式都對映為具體數值再做運算。
比如在這裡,程式碼執行到rerurn n*f(n-1);
這句話,會先變成return 5*f(5-1)
,結果程式碼發現f(4)擋在這裡不知道什麼東西,沒法計算,它就會繼續去呼叫f(4),變成return 5*4*f(4-1)
,……,一直把所有括號都拆開,寫成return 5*4*3*2*1
,這時候程式碼就清楚了,沒啥需要進一步拆解的了,可以輕輕鬆鬆一口氣計算出來。
所以所謂遞迴遞迴,就是不停拆括號這樣一個層層疊疊拆解方法的過程。
圖解如下: