1、基本介绍
基本步骤:
2、应用实践(汉诺塔)
package algorithm;
public class HanoiTower {
public static void main(String[] args) {
int n = 4;
hanoiTower(n, 'A', 'B', 'C');
}
// 理解:移动一个盘子时,无需借助额外的柱子
// 但移动多个盘子时,则需要借助额外的柱子充当中间媒介
private static void hanoiTower(int n, char A, char B, char C) {
// 如果只有一个盘子,则直接把该盘子从A柱子移动到C柱子
if (n == 1) {
move(n, A, C);
} else {
// n >= 2
hanoiTower(n - 1, A, C, B); // 则需先把A中的n-1个盘子借助C柱子,暂时移动到B柱子(此时要n-1个盘子和第n个盘子看成两部分)
move(n, A, C); // 再把第n个盘子,移动到C柱子
hanoiTower(n - 1, B, A, C); // 然后再把在B柱子上的盘子通过借助A柱子,从而移动到C柱子
}
}
// 该方法用于移动盘子
// @source:表示作为原点的柱子
// @dest:表示作为终点的柱子
private static void move(int n, char source, char dest) {
System.out.println("第" + n + "个盘子:" + source + " => " + dest);
}
}