[java]代码库
/*
* 需求:用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://yuncode.net