數據結構5——遞歸

定義

  • 一個函數自己直接或間接調用自己。

求階乘

  • 遞歸思想: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 …
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章