<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 71  文章 - 15  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    因為口渴,上帝創造了水;
    因為黑暗,上帝創造了火;
    因為我需要朋友,所以上帝讓你來到我身邊
    Click for Shaanxi xi'an, Shaanxi Forecast
    ╱◥█◣
      |田|田|
    ╬╬╬╬╬╬╬╬╬╬╬
    If only I have such a house!
    〖總在爬山 所以艱辛〗
    Email:myesjoy@yahoo.com.cn
    NickName:yesjoy
    MSN:myesjoy@hotmail.com
    QQ:150230516

    〖總在尋夢 所以苦痛〗

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    Hibernate在線

    Java友情

    Java認證

    linux經典

    OA系統

    • ¤易能協同辦公系統¤
    • 流程管理、知識管理、客戶關系管理、輔助辦公
    • ¤黃城網絡辦公系統3.0¤
    • B/S結構,適用于Intranet/Internet應用,實現無地域限制的全球辦公,具有郵件管理、業務管理、網絡硬盤、智能工作流等功能。

    Spring在線

    Structs在線

    專家專欄

    企業信息化

    大型設備共享系統

    工作流

    工作流產品

    網上購書

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    轉自:http://www.tkk7.com/dengyin2000/archive/2006/03/12/34902.html
    大學的數據結構和算法根本就是混過來的,某天在某某論壇里有個關于數據結構和算法到底在日常的編程到底有多大的用處。對于我來說,我并不覺得我用上了那些講的數據結構和算法。Java Collection Framework已經跟我們做了這些。我已經能非常熟練的使用Collection里面的類庫。但是我們用的基本上都是那些線性集合(堆棧,隊列,列表,Set),非線性集合(樹,堆,散列和圖)我感覺比較少用到。我也主要是想對非線性集合做一些比較。線性集合比較簡單。

     

     第一章到第九章都是講線性集合, 也比較容易理解, 在這里就忽略掉。第十章是講遞歸算法。我對這章比較感興趣,用遞歸實現某個算法真的感覺非常優雅,代碼短而少,許多非線性集合都是用遞歸來實現的。但也有他的缺點, 對方法的每次遞歸調用都會生成新的局部變量和局部參數。假如遞歸層次太多的話,就會消耗太多的stack。

     

    任何遞歸定義都必須有一個非遞歸部分;這個非遞歸部分叫做基本情況,它使的遞歸跳出無窮循環遞歸。

    Ex 1 1~N的累加過程,數值1N的累加可以看成是1N1的累加加上N。

     

           public int sum(int num){

                  
    int result = 0;

                  
    if (num == 1){

                         
    return 1;

                  }


                  
    return result + num + sum(num - 1);

           }

     

    這里的基本情況就是但num==1的時候。 當然這個可以不用遞歸來處理,用一個for就行了(而且比用遞歸更直觀)。我們必須能判斷什么時候使用遞歸,什么時候不使用遞歸,所有問題都可以使用迭代(for循環)解決問題。不過有些情況下,迭代方式過于復雜,對某些問題,遞歸可以寫出短小而優雅的代碼。

     

     

    直接遞歸和間接遞歸,方法調用自己,這就是直接遞歸(如上個例子)。方法調用另一個方法,最終導致再調用原方法。這就是間接遞歸。

     

    河內塔問題(Towers of Hanoi)(可以上網找找這個經典問題的描述)

    規則:

    l         一次只能移動一張圓盤

    l         不能將大盤放在小盤的上方

    l         除了那張在柱子之間搬動的圓盤之外,所有圓盤都必須在某根柱子上

     

    策略:

    l         將最上方的N1張圓盤從最初的柱子移到那根多處的柱子上

    l         將最大的圓盤從最初的柱子移動到最終的柱子上

    l         再將那個多出柱子上的N1張圓盤移到最終的柱子上

     

    public      class TowersOfHanoi{

                  
    private int totalDisks;

                  
    // ------------------------------------------------------

                  
    // Sets up the puzzle with the specified number of disks

                  
    // ------------------------------------------------------

                  
    public TowersOfHanoi(int disks){

                         
    this.totalDisks = disks;

                  }


                  
    // ----------------------------------------------------------

                  
    // Performs the initial call to moveTower to solve the puzzle.

                  
    // Moves the disks from tower 1 to tower 3 using tower 2

                  
    // ----------------------------------------------------------

                  
    public void solve(){

                         moveTower(totalDisks, 
    13,2);

                  }


                  
    // -----------------------------------------------------------------

                  
    // Moves the specified number of disks from one tower to another by 

                  
    // moving a subtower of n-1 disks out of the way, moving one disk, 

                  
    // then moving the subtower back, Base case of 1 disk.

                  
    // -----------------------------------------------------------------

                  
    private void moveTower(int numDisks, int start, int end, int temp) {

                         
    if (numDisks == 1){

                                moveOneDisk(start, end);

                         }
    else{

                                moveTower(numDisks
    -1, start, temp, end);

                                moveOneDisk(start, end);

                                moveTower(numDisks
    -1, temp, end, start);

                         }


                  }


                  
    private void moveOneDisk(int start, int end) {

                         System.out.println(
    "Move one disk from " + start + " to " + end);

                  }


           }

    posted on 2007-06-19 15:20 ★yesjoy★ 閱讀(300) 評論(0)  編輯  收藏 所屬分類: 算法總結
    主站蜘蛛池模板: 97免费人妻无码视频| 无码日韩精品一区二区免费暖暖| 国内精品免费麻豆网站91麻豆| 亚洲AV无码国产精品色午友在线| 你好老叔电影观看免费| 国内精品久久久久久久亚洲| 中文字幕版免费电影网站| 国产亚洲精品不卡在线| 中文字幕视频免费在线观看| 亚洲国产另类久久久精品| 在线看片免费人成视频播| 亚洲男女一区二区三区| 中国在线观看免费国语版| 亚洲狠狠色丁香婷婷综合| 又粗又大又猛又爽免费视频| jizz免费在线观看| 亚洲va在线va天堂va四虎 | 国产成人A亚洲精V品无码| 国产在线观看无码免费视频| 亚洲av无码一区二区乱子伦as| 免费一级毛片无毒不卡| 亚洲六月丁香六月婷婷色伊人| 成人毛片手机版免费看| 美女被羞羞网站免费下载| 综合亚洲伊人午夜网 | 青青视频观看免费99| 久久精品国产亚洲av品善| 亚洲中文字幕久久精品无码喷水 | 大学生美女毛片免费视频| 深夜A级毛片视频免费| 无码专区—VA亚洲V天堂| 成人女人A级毛片免费软件| 国产亚洲精品美女2020久久| 亚洲精品成人片在线播放| 91成人免费观看网站| 黄色免费网站在线看| 亚洲最新视频在线观看| 手机看片久久国产免费| 久久成人免费电影| 精品韩国亚洲av无码不卡区| 亚洲av无码专区国产乱码在线观看 |