汉诺塔

汉诺塔是一个经典的递归问题

实际上每次只需要考虑最下面的盘子,和除最下面以外所有的盘子(递归)

//汉诺塔
public class HanioDemo {

    public static void main(String[] args) {
        char from = 'A';
        char mid = 'B';
        char end = 'C';
        HanioDemo.hanio(3, from, mid, end);
    }

    /**
     * 
     * @param n           n个盘子
     * @param from       开始的柱子
     * @param mid        中间的柱子
     * @param end       目标柱子
     * 汉诺塔问题实际上就考虑两种情况:只有一个盘子,和只有除最下面一个盘子以外的所有盘子
     */
    public static void hanio(int n, char from, char mid, char end) {
        if (n == 1) {
            System.out.println("把第1个盘子从" + from + "移动到" + end);
        } else {
            // 先把除了最下面的盘子以外的n-1个盘子移到中间的柱子
            hanio(n - 1, from, end, mid);
            // 把最后一个盘子移到目标柱子
            System.out.println("把第" + n + "个盘子从" + from + "移动到" + end);
            // 然后借助第一个柱子,把中间柱子上的盘子移到目标柱子
            hanio(n - 1, mid, from, end);
        }
    }

}
原文地址:https://www.cnblogs.com/yuange678/p/10627569.html