資料結構5_遞迴

太陽以西.S發表於2020-10-10

定義

  • 一個函式自己直接或間接呼叫自己。

求階乘

  • 遞迴思想:n的規模的解決需要藉助n-1,n-1規模的解決需要藉助n-2…直到到達一個臨界點。
  • 迴圈實現
    在這裡插入圖片描述
  • 遞迴實現
    在這裡插入圖片描述

1+2+3+4+…+100的和

在這裡插入圖片描述

遞迴必須滿足的三個條件

  • 遞迴必須要有一個明確的終止條件
  • 該函式所處理的資料規模必須在遞減
  • 這個轉化必須是可解的

迴圈和遞迴

  • 所有的迴圈都可以使用遞迴實現,但不是所有的遞迴都可以用迴圈解決。
  • 遞迴:
    • 易於理解
    • 速度慢
    • 儲存空間大
  • 迴圈:
    • 不易理解
    • 速度快
    • 儲存空間小

漢諾塔

public class Hanoi {
    public static void main(String[] args) {
        move(4,"石柱1","石柱2","石柱3");
    }

    private static void move(int i, String from, String buffer, String to) {
        // 第一步:遞迴結束條件
        // 最後一個圓盤從from到to
        if(i == 1){
            System.out.println(i+"from"+from+"to"+to);
            return;
        }
        // i-1個圓盤從from到buffer
        move(i-1,from,to,buffer);
        System.out.println(i+"from"+from+"to"+to);
        // i-1個圓盤從buffer到to
        move(i-1,buffer,from,to);
//        System.out.println(i+"from"+from+"to"+to);
    }
}

遞迴的應用

  • 樹和森林就是以遞迴的方式定義的
  • 樹和圖的很多演算法都是以遞迴來實現的
  • 很多數學公式就是以遞迴的方式定義的
    • 斐波拉契數列
      • 1 2 3 5 8 13 21 34 …

相關文章