天天看點

資料結構 - 遞歸

關注 “弋凡”(YiFan)微信公衆号吧 記錄簡單筆記 做你的最愛

遞歸介紹

一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法

當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸傳回

斐波那契數列

介紹

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

代碼

public class Recursive {

    public static void main(String[] args) {
        // 遞歸 --- 列印斐波那契數列  1 1 2 3 5 8 13 21 ...前2項資料和
        System.out.println(new Recursive().Fibonacci(6));
    }

    // 列印第n項斐波那契數列資料
    public int Fibonacci(int i){
        if(i==1 || i==2 ){
            return 1;
        }else {
           return Fibonacci(i-1)+Fibonacci(i-2);
        }
    }

}
           

漢諾塔

介紹

漢諾塔:漢諾塔(又稱河内塔)問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。大梵天指令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次隻能移動一個圓盤。

資料結構 - 遞歸

代碼

public class Recursive {

    public static void main(String[] args) {
        HanoiTest.hanoi(3,'A','B','C');
    }
}

class HanoiTest{

    /**
     * @param n     共有 n 個盤子
     * @param from  開始的柱子
     * @param in    中間的柱子
     * @param to    目标柱子
     */
    public static void hanoi(int n,char from,char in ,char to){
        // 隻有一個盤子
        if (n == 1){
            System.out.println("第1個盤子從"+from+"移動到"+to);
        }else { // 無論有多少盤子 都認為隻有2個盤子,上面的所有盤子和最下面的一個盤子
            // 移動上面的所有盤子到中間柱子上
            hanoi(n-1,from,to,in);
            // 移動下面的盤子
            System.out.println("第"+n+"個盤子從"+from+"移動到"+to);
            // 把上面的所有盤子從中間位置移動到目标位置
            hanoi(n-1,in,from,to);
        }
    }
}

           

快來關注“弋凡”微信公衆号吧

資料結構 - 遞歸