题目描述
打印n层汉诺塔从最左边移动到最右边的全部过程。(只能小压大)
思路
子问题:N = 3时,即先用三个圆盘模拟移动过程。
仿照3个圆盘的处理方法,用递归解决父问题。
代码
package 算法;
public class Hanoi {
/**
* 移动过程
* @param N N个圆盘
* @param Start 起点杆
* @param End 终点杆
* @param Help 辅助杆
*/
public static void Move(int N, String Start, String End, String Help) {
if (N == 1) {
System.out.println(" Move 1 From " + Start + " to " + End );
}else {
Move( N - 1, Start, Help, End); // 将剩下的N - 1个圆盘借助终点杆从起点杆移到辅助杆上
System.out.println(" Move " + N + " From " + Start + " to " + End);
Move(N - 1, Help, End, Start); // 再将剩下的N - 1个圆盘借助起点杆从辅助杆移到终点杆
}
}
public static void main(String[] args) {
int n = 3;
Move(n, "左", "右", "中" );
}
}
运行结果
Move 1 From 左 to 右
Move 2 From 左 to 中
Move 1 From 右 to 中
Move 3 From 左 to 右
Move 1 From 中 to 左
Move 2 From 中 to 右
Move 1 From 左 to 右