不知道汉诺塔这个游戏大家有没有玩过,非常有意思。算法思想也不复杂。
package java21to30;
public class D27_Hanoi {
static int m = 0;// 移动次数
public static void main(String[] args) {
hanoi('a', 'b', 'c', 3);
}
// 递归实现汉诺塔的函数
public static void hanoi(char A, char B, char C, int n) {
if (n == 1)// 从A塔移到C塔
D27_Hanoi.move(1, A, C);// 将编b号为1的圆盘从A移到C
else {
hanoi(A, C, B, n - 1);// 递归,把A塔上编号1~2的圆盘移到B上,以C为辅助塔
D27_Hanoi.move(n, A, C);// 把A塔上编号为n的圆盘移到C上
hanoi(B, A, C, n - 1);// 递归,把B塔上编号1~2的圆盘移到C上,以A为辅助塔
}
}
public static void move(int disks, char N, char M) {
System.out.println(String.format("第%s次移动,将%s号盘从%s->移动到->%s", (++m), disks, N, M));
}
}
输出结果:
第1次移动,将1号盘从a->移动到->c
第2次移动,将2号盘从a->移动到->b
第3次移动,将1号盘从c->移动到->b
第4次移动,将3号盘从a->移动到->c
第5次移动,将1号盘从b->移动到->a
第6次移动,将2号盘从b->移动到->c
第7次移动,将1号盘从a->移动到->c