题目
移动盘子,每一次只能移动一个,小盘子在大盘子上。
打印1 from A to B过程
注意
1)盘子编号的变化和辅助柱子的变化
2)当盘子编号为1时,结束递归,此时移动结束
代码
package p2;
/**
* Illustration
*
* @author DengQing
* @version 1.0
* @datetime 2022/5/7 16:01
* @function 汉诺塔问题:把盘子从A移动到B【A B C】
* 移动盘子,每一次只能移动一个,小盘子在大盘子上。
* 打印1 from A to B过程
*/
public class problem8 {
public static void main(String[] args) {
move(3, "A", "B", "C");
}
/**
* n:初始的n个盘子,n为最大编号
* from:原始柱子
* to:目标柱子
* help:辅助柱子
*/
public static void move(int n, String from, String to, String help) {
//当移动1号盘子时,递归结束
if (n == 1) {
System.out.println("盘子" + n + "从" + from + "移动到" + to);
return;
}
/*盘子1从A移动到B
盘子2从A移动到C
盘子1从B移动到C
盘子3从A移动到B
盘子1从C移动到A
盘子2从C移动到B
盘子1从A移动到B*/
//先把1~n-1个盘子移动到辅助空间上
move(n - 1, from, help, to);
//n号盘子可以到达目标柱子
System.out.println("盘子" + n + "从" + from + "移动到" + to);
//再把1~n-1个盘子从辅助空间移动到目标柱子上去
move(n - 1, help, to, from);
}
}