题目
移动盘子,每一次只能移动一个,小盘子在大盘子上。
打印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);}
}