汉诺塔

递归的老朋友

注释已经写得很清楚了,不明白的可以多跟踪几遍

package com.yc.algorithm.recursion;

/**
 * 递归处理汉诺塔
 */
public class TowerOfHanoi {
    public static void main(String[] args) {
        move(3, "X", "Y", "Z");
    }

    /**
     * 汉诺塔移动
     * 将n个汉诺塔,从x柱子借助y柱子移动到z柱子
     * 1.如果只有一个盘子,则直接从x柱子移动到z柱子。
     * 2.如果不是一个盘子
     *      (1)将n - 1个盘子从x借助z移动到y上。
     *      (2)将第n个盘子从x直接移动到z上。
     *      (3)将y上的n - 1个盘子借助x移动到z上。
     * @param n 汉诺塔层数
     * @param x 第一个柱子
     * @param y 第二个柱子
     * @param z 第三个柱子
     */
    private static void move(int n, String x, String y, String z) {
        if (1 == n) {
            System.out.println(x + " ----> " + z);
        } else {
            move(n - 1, x, z, y);
            System.out.println(x + " ----> " + z);
            move(n - 1, y, x, z);
        }
    }
}

输出结果如下:

X —-> Z
X —-> Y
Z —-> Y
X —-> Z
Y —-> X
Y —-> Z
X —-> Z

点赞