java棧和遞迴的關係

來源:互聯網
上載者:User

標籤:操作   img   資料   example   .com   nbsp   隊列   推薦   結構   

  最近看了Mark.Allen.Weiss的演算法與資料結構,看到了裡面講述的表、棧和和隊列,結合最近工程用的比較多的遞迴運算。所以這裡講一下遞迴

  因為在年初的時候看了《大話資料結果》(推薦看一下),這裡先講一下概念:函數的遞迴調用和普通函數調用是一樣的,當程式執行到某個函數時,將這個函數進行入棧操作,入棧之前主要做三件事

  1.把入參,返回地址等返回給被調用函數儲存

  2.分配棧空間

  3.準備被調用

  出棧也一樣:

  1.儲存運算結果

  2.消除棧空間

  3.把運算結果放到棧空間出口

  所以遞迴這種儲存某些資料,並在後面又以儲存的逆序恢複這些資料,以提供之後使用的需求,顯然很符合棧這樣的資料結構,因此,編譯器使用棧實現遞迴就沒什麼好驚訝的了。

  example:

  

  這種程式稱為尾遞迴使用不當的例子。尾遞迴設計在最後一行的遞迴調用。尾遞迴可以通過講代碼放到一個while迴圈中並用每個方法參數的一次賦值代替遞迴調用而被手工刪除。下面是去除遞迴之後的寫法

 

  其實在代碼運算的過程中,遞迴總總能夠被徹底去除(編譯器是在轉變成組合語言時完成遞迴去除的);但是這麼做是相當冗長乏味的。一般方法要求使用一個棧,而且僅當你能夠把最低限度的最小值放到棧上時這個方法才值得一用。

java棧和遞迴的關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.