汉诺塔问题是在编程时经常提到的一个问题,因为它在递归的使用方法有很强的代表性。它讲的是需要将N个盘子从A柱上通过B柱的辅助全部移动到C柱上,其间只有一个条件需要注意,那就是大盘子始终在小盘子下面。
如何用递归的思路来解决问题呢?方法很简单,其实我们其它的什么都不需要考虑,只需要这样想,假设现在有10只盘子,我只需要将上面的9只从A柱放到B柱上,而且是上小下大,这样就可以将第10只盘子从A柱放到C柱上了,再将那9只盘子通过A柱移动到C就可以了,至于那9只盘子如何移动,我们可以这样想,我们可以用和第10只盘子相同的方法,先将上面9只通过B柱移动到C柱,然后将第9只盘子从A移动到B,再将那8只通过A从C移动到B就可以了,依此类推,方法都是一样的。因此可以有这样的程序出现。
public void move(int n ,char one ,char two, char three){
if(n==1)
System.out.println("第"+n+"只盘子由"+one+"--"+three);
else{
move(n-1, one , three , two);//将第n-1只盘子从one通过three移动到two;
System.out.println("第"+n+"只盘子由"+one+"--"+three);
move(n-1, two , one , three););//将第n-1只盘子从two通过one移动到three;
}
}
然后我们要做的就是通过一个主函数来调用这个方法就可以了。
public class HanN
{
public static void main(String [] args)
{
HanN hn = new HanN();
hn.move(3,'A','B','C');
}
}