汉诺塔问题

汉诺塔问题是在编程时经常提到的一个问题,因为它在递归的使用方法有很强的代表性。它讲的是需要将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');
}

}
posted @ 2009-08-10 13:40  super_mario  阅读(131)  评论(0编辑  收藏  举报