[JAVA]Divide and Conquer - Hanoi Tower

分治法

package utitled;

public class HanoiTowerDemo {

    /**
     * 若盤子只有一個:A -> C 柱
     *
     * 若盤子n >= 2
     * 將hanoi tower分成兩部分來看,
     * 最底部盤上方全部的盤都屬於另一部分 A -> B 柱
     * 最底部的大盤視為一部分 A -> C 柱
     * 最底部盤上方全部的盤都屬於另一部分 B -> C 柱
     */

    public static void main(String[] args) {
        showDishesMovedTrace(5, 'A', 'B', 'C');

    }

    private static void showDishesMovedTrace(int num, char pillarA, char pillarB, char pillarC) {
        if (num == 1) {
            // 若盤子只有一個,A -> C
            System.out.printf("第%d個盤,從%c -> %c\n", num, pillarA, pillarC);
        } else {
            // 若盤子有2個以上,最底盤上面的所有盤 A -> B,借助C
            showDishesMovedTrace(num - 1, pillarA, pillarC, pillarB);
            // 最底部盤A -> C,借助B
            System.out.printf("第%d個盤,從%c -> %c,借助%c\n", num, pillarA, pillarC, pillarB);
            // 將B柱所有盤移動到C,B -> C,借助A
            showDishesMovedTrace(num - 1, pillarB, pillarA, pillarC);
        }
    }


}

如有敘述錯誤,還請不吝嗇留言指教,thanks!