簡單的斐波那契數列和漢諾塔遊戲

斐波那契數列指的是這樣一個數列:

這個數列從第3項開始,每一項都等於前兩項之和。

漢諾塔遊戲

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

/**
 * @Description 實現簡單的斐波那契數列和漢諾塔遊戲
 * @auther Eleven
 * @create 2020-04-04 18:20
 **/
public class Febonacci {

    public static void main(String[] args) {
        Febonacci febonacci = new Febonacci();
        int i = febonacci.febonacci(5);
        System.out.println("febonacci:"+i);
        febonacci.hannuoTa(2,'A','B','C');
    }

    //斐波那契數列實現
    public int febonacci(int index){
        // 1 1 2 3 5 8 13
        if(index == 1 || index == 2){
            return 1;
        }else{
           return febonacci(index-1)+febonacci(index-2) ;
        }
    }

    //漢諾塔遊戲算法
    /**
     *
     * @param i 第一個柱子上有幾個圈圈
     * @param from 起始位置
     * @param middle 中間位置
     * @param to 最終位置
     */
    public void hannuoTa(int i,char from ,char middle,char to){
        if(i==1){
            System.out.println("把第"+i+"個,從"+from+"移動到"+to);
        }else{
            //超過1個的時候,無論有幾個都看成是兩個,最後一個加上面的一堆作爲一個
            //先將上面一個移動到中間
            hannuoTa(i-1,from,to,middle);
            System.out.println("把第"+i+"個,從"+from+"移動到"+to);
            //再將中間的移動到目標位置
            hannuoTa(i-1,middle,from,to);
        }

    }
}

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