遞迴與迭代

來源:互聯網
上載者:User

標籤:遞迴與迭代

最近, 看了High order Perl這本書,一時勾起了對遞迴與迭代這個話題的興趣。


遞迴  對應的哲學思想是 自上而下, 即對問題進行分解,降緯。

迭代  是相反的哲學  自下而上, 即對問題進行規約, 從低緯度推廣到高緯度。


遞迴有什麼好處? 代碼直觀, 好寫好維護。有什麼缺點?  效能較差

迭代好處? 效能能改善。 缺點? 代碼難看懂,維護難。


為什麼說迭代比遞迴效能差? 

很多人說是因為編譯器通常使用堆棧技術,多佔用了一些寄存器的恢複。其實,並不是這個原因。

關鍵的問題是, 我們將問題求解看成一個求解樹,  下面有很多子樹, 很多情況下是重複的。

所以,針對這個問題的最佳化方法很直觀的就是 記憶, 比較經典的演算法就是動態規劃。

在技術上,我們叫Memorize技術。其背後的核心哲學就是用空間換時間。


第二個難題就是如何遞迴變迭代。

對於尾遞迴,我們很容易轉化為迭代。但,對於漢若塔這類非線性問題就不容易了。

常見的變通方法是用Stack類比編譯器使用的遞迴實現。這類方法其實是偽迭代。


找到了日本人的一篇論文

http://dspace.wul.waseda.ac.jp/dspace/bitstream/2065/28415/3/Honbun-4532.pdf

一堆數學公式,實在看得頭痛。

看來不是搞學術的料。


從個人直觀的感覺, 應該可以將整個樹對應 N進位, 比如2進位,3進位等。

這樣,我們便能從0到x不斷迭代下去。

問題的關鍵,是如何Memorize,如何最佳化。





遞迴與迭代

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.