汉塔问题
问题描述
有A,B,C 根柱子,在A上从上往下按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上。
要求移动过程中,不能把大盘放在小盘上面。
实现思想
递归:
为了实现第N个(最下面那个)盘从A到C的移动
1.首先要实现其上的N-1个盘移动到B
2.然后把第N个盘移动到C
3.再实现这N-1个盘从B移动回A。
4.此时问题退化为N-1个碟子从A移动到B的问题,以此类推。
所以首先构造一个用于递归调用的移盘方法:moveDish().
源代码(java)
import java.util.Scanner;
//汉塔问题求解
public class Hanta {
//用于测试的main()方法
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int level = sc.nextInt(); //获取测试层数
moveDish(level, 'A', 'B', 'C'); //调用方法
}
//用于递归调用的移动方法
public static void moveDish(int level , char from , char medium , char to) {
if(level == 1) { //退出递归条件
System.out.println("从"+from+"移动"+level+"号盘子到"+to);
}else { //递归调用
moveDish(level-1 , from , to , medium);
System.out.println("从"+from+"移动"+level+"号盘子到"+to);
moveDish(level-1 , medium , to , from);
}
}
}