數據結構算法---遞歸

一、遞歸思想
  遞歸的思想就是把一個問題分解成一個個的子問題和子子問題,然後這些子問題逐級返回,得到最終結果。
總結一下遞歸需要滿足的幾個條件:

  1. 一個問題的解可以分解爲幾個子問題的解。
  2. 問題與子問題,求解思路完全一樣。
  3. 存在遞歸終止條件。

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

    private static int febonacii(int index) {
        //終止條件
        if (index == 0) {
            return 0;
        }else if(index ==1){
        	return 1;
        }else {
            //遞歸
            return febonacii(index - 1) + febonacii(index - 2);
        }

    }

3.結果:

febonacii(8)
34

三、漢諾塔
 1.漢諾塔遊戲規則:把所有圓環從最左邊的柱子移動到最右邊的柱子(有三個柱子),每次只能移動一個盤子,大圓環不能壓在小圓環上。
 2.分析:第一關
在這裏插入圖片描述
第二關:
在這裏插入圖片描述
第三關:
在這裏插入圖片描述
第四關:
在這裏插入圖片描述
通過上面演示可以分析得出以下結論:

  1. 只有1個圓環則直接把圓環從from移動到to
  2. 無論多少(n)個圓環都看成兩個圓環(n-1)爲一個圓環,n爲最後一個圓環
  3. 把n-1個圓環移動到中間柱子
  4. 移動最後一個盤子到最右邊的目標柱子
  5. 把n-1個圓環從中間柱子移動到目標柱子

3.代碼實現:

public static void hanoi(int n, String from, String in, String to) {
        //只有一個圓環則直接把圓環從from移動到to
        if (n == 1) {
            System.out.println("第1個圓環從" + from + "移動到" + to);
        }else {
         //無論多少(n)個圓環都看成兩個圓環(n-1)爲一個圓環,n爲最後一個圓環
            //把n-1個圓環移動到中間柱子
            hanoi(n-1,from,to,in);
            //移動最後一個盤子到最右邊的目標柱子
            System.out.println("第"+n+"個圓環從" + from + "移動到" + to);
            //把n-1個圓環從中間柱子移動到目標柱子
            hanoi(n-1,in,from,to);
        }

    }

4.結果:

 hanoi(4,"A","B","C");1個圓環從A移動到B
第2個圓環從A移動到C
第1個圓環從B移動到C
第3個圓環從A移動到B
第1個圓環從C移動到A
第2個圓環從C移動到B
第1個圓環從A移動到B
第4個圓環從A移動到C
第1個圓環從B移動到C
第2個圓環從B移動到A
第1個圓環從C移動到A
第3個圓環從B移動到C
第1個圓環從A移動到B
第2個圓環從A移動到C
第1個圓環從B移動到C
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章