數據結構與算法分析筆記(4)——遞歸

簡單來說,遞歸(recursion)就是程序簡單調用自身的技巧一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型複雜的問題層層轉化爲一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重複計算,大大地減少了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。

調用自身的方法爲遞歸方法(recursive method)。這個調用就稱爲遞歸調用(recursive call 或 recursive invocation)。

設計成功遞歸的準則:

1.方法必須被賦予一個輸入值,通常以實參的形式,有時候也以讀入值的形式;

2.方法的定義必須包括這樣的邏輯,方法必須以這個輸入值作爲導致不同情況的參數。這樣的邏輯一般包括一個if語句或switch語句。

3.其中一個或多個情況應該具有無需遞歸的解,這些情況爲基本情況或終止情況(stopping cases);

4.其中一個或多個情況必須包含對方法的遞歸調用。這些遞歸調用在某種意義上應該通過使用“更小”的實參或者解決該方法所要執行的任務的“更小”版本,向某個基本情況前進一步

/**Task:從一個給定的正整數開始倒計數
* @param integer  大於0的整數*/
public static void countDown(int integer){
    System.out.println(ingeger);
    if(integer>1)
          countDown(integer-1);
}

活動記錄棧:對一個方法的每次調用都會產生一個活動記錄放進棧裏,該記錄保存了方法的執行狀態。通常,遞歸方法要比迭代方法用到更多的內存,因爲每一次遞歸調用都會產生一個活動記錄。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章