1. 程式人生 > >簡單演算法解決漢諾塔問題

簡單演算法解決漢諾塔問題

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

漢諾塔問題在數學界有很高的研究價值,而且至今還在被一些數學家們所研究。也是我們所喜歡玩的一種益智遊戲,它可以幫助開發智力,激發我們的思維。

下面我們用程式碼的形式解決漢諾塔的問題:

假設盤子個數為N, N≥1,三根柱子分別為a柱,b柱,c柱.
那麼移動盤子的步驟如下:
如果n == 1的時候,直接把盤子從a柱移到c柱即可.
1.把第n-1個盤子藉助c柱,從a柱移動到b柱;
2.把第n個盤子從a柱移動到c柱;
3.把第n-1個盤子從b柱藉助a柱移動到c柱.

具體程式碼如下:

package com.tracy.algorithm;

public class Hanoi {

    public static void main(String[] args) {

        int n = 3;
        move(n, 'a', 'b', 'c');
    }

    public static void move(int n, char a, char b, char c) {
        if (n == 1) {
            System.out.println("盤" + n + "從" + a + "柱子移動到"
+ c + "柱子"); } else { // 1. move(n - 1, a, c, b); // 2. System.out.println("盤" + n + "從" + a + "柱子移動到" + c + "柱子"); // 3. move(n - 1, b, a, c); } } }

當盤子數n == 3時,控制檯列印結果如下:

這裡寫圖片描述

當盤子數n == 4時,控制檯列印結果如下:

這裡寫圖片描述

執行結果與實際相符.

這裡可以看到,當盤子數量比較大的時候,幾行程式碼就可以解決原本很複雜的數學問題,這就是”遞迴”的魅力.