Loading

汉诺塔

/**
 * Hanoi
 */
public class Hanoi {

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

    /**
     * 递归汉诺塔
     * 
     * @param n        盘子数
     * @param start    起始柱子
     * @param transfer 中转柱子
     * @param target   目标柱子
     */
    public static void hanoi(int n, char start, char transfer, char target) {
        // 递归出口,只有一个盘子,直接搬到目标柱子
        if (n == 1) {
            System.out.println(start + " --> " + target);
        } else {
            // 起始柱子借助目标柱子,将盘子都移动到中转柱子(除了最大的盘子)
            hanoi(n - 1, start, target, transfer);
            System.out.println(start + " --> " + target);

            // 中转柱子借助起始柱子,将盘子都移动到目标柱子
            hanoi(n - 1, transfer, start, target);
        }
    }
}
posted @ 2020-03-19 13:06  江南笑书生  阅读(88)  评论(0编辑  收藏  举报