1. 程式人生 > 實用技巧 >【狂神說Java學習筆記】階段一JavaSE基礎(七)遞迴

【狂神說Java學習筆記】階段一JavaSE基礎(七)遞迴

筆記內容:狂神說Java階段一Java基礎視訊P50
狂神說Java視訊連結


目錄

1、遞迴要素
2、遞迴練習


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,這時候程式碼就清楚了,沒啥需要進一步拆解的了,可以輕輕鬆鬆一口氣計算出來。

所以所謂遞迴遞迴,就是不停拆括號這樣一個層層疊疊拆解方法的過程。

圖解如下: