执手麦田的咖啡空间  
专注于Java的学习研究
公告
  • 于喧闹网界之中,寻一处僻静之所,与三二好友,品程序、论思想,其乐何融融!
    执手麦田的咖啡馆——在这里关注JAVA的学习研究
日历
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

留言簿(2)

随笔分类(13)

随笔档案(13)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
汉诺塔问题是在编程时经常提到的一个问题,因为它在递归的使用方法有很强的代表性。它讲的是需要将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 on 2007-04-28 09:27 执手麦田 阅读(1872) 评论(2)  编辑  收藏 所属分类: 咖啡馆
评论:
  • # re: 关于汉诺塔的理解  511065122 Posted @ 2007-11-24 01:30
    哈哈
    谢谢楼主的解答
    这个问题一直亏绕着我
    希望你能加我 入群
    我也是J2MM游戏开发的,  回复  更多评论   

  • # re: 关于汉诺塔的理解  Jerry Qian Posted @ 2009-12-15 10:41
    如果是1個盤子的話,那只要一次就可以 了直接 a-c樓主這裡要兩次啊.  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © 执手麦田 Powered by: 博客园 模板提供:沪江博客