執手麥田的咖啡空間  
          專注于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 執手麥田 閱讀(1889) 評論(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: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 芦山县| 安徽省| 乌拉特中旗| 辽阳市| 三穗县| 洛隆县| 城固县| 南投县| 太白县| 中西区| 图木舒克市| 阳新县| 双鸭山市| 延寿县| 鹤岗市| 中西区| 林芝县| 淄博市| 察哈| 萝北县| 哈密市| 荆门市| 清原| 定远县| 贵定县| 萝北县| 郯城县| 施秉县| 崇信县| 成安县| 延吉市| 宜宾市| 麻阳| 乌海市| 多伦县| 枣强县| 翼城县| 芮城县| 巴里| 都兰县| 自贡市|