- /**
- * 需求:用Java编写一个汉诺塔的过程
- * 汉若塔问题,就是把A柱子上面从大到小一次叠放的盘子借助B柱移到C柱上去,规则是一次只能移动一个盘子,大盘子不能放到小盘子之上
- *
- * 思想:采用递归的方法来接
- * 1. 先将A上面的n-1个盘子,移到B柱上
- * 2. 然后把A上最大的一个盘子放到C上去
- * 3. 然后把B上面的n-1个盘子移到A上去
- *
- * 步骤:
- * 汉若塔用递归思考首先考虑一种临界状态,把n-1个上面的盘从A—B, 就是把n从A移动到C,最后把n-1个盘从B---C,
- * (注意在考虑把n-1个盘从B---C的时候就出现递归调用,如果把A,B盘交换就又重复上面的流程了,最后到n = 1的时候就返回)
- *
- * 伪代码:
- * public void run(int n, char a, char b, char c)
- {
- if(n==1)
- {
- move(n,a,c) //等于1的时候把盘从A移动到C
- }else
- {
- run(n-1,a,b,c);//递归调用把a上面的n-1个盘移动到B上,怎么表示移动?把柱子交换不就是移动了。
- move(n,a,c);
- run(n-1,b,a,c);//意图是把n-1个盘从B移动到A上。
- }
- }
- *
- */
- public class HanoiTower {
- public static void moveDish(int level, char from, char inter, char to)
- {
- if(level ==1)
- {
- System.out.println("从 "+from+"移动盘子1号到 "+to);
- }else
- {
- moveDish(level-1,from,to,inter);
- System.out.println("从 "+from+" 移动盘子 "+level+" 号到 "+to);
- moveDish(level-1,inter,from,to);
- }
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int nDisks = 3;
- moveDish(nDisks,'A','B','C');
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/0312201514165.html
来源: http://www.codesnippet.cn/detail/0312201514165.html