递归的老朋友
注释已经写得很清楚了,不明白的可以多跟踪几遍
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