數據結構學習(C++)之遞歸(good)
http://www.yesky.com/90/1736590.shtml
對于遞歸的一些探討
http://blog.csdn.net/zongxiong/archive/2006/03/23/635777.aspx
quote:
用遞歸的程序都可以用迭代(其實也就是循環)的方式代替,而所有的循環程序也都可以改寫成遞歸,這
兩者之間的轉換只是一個程序設計難度、易讀性以及程序執行效率的問題。
如何用棧實現遞歸與非遞歸的轉換
http://blog.csdn.net/dragondwy/archive/2006/06/30/855391.aspx
遞歸函數的工作原理!
http://www.oia.com.cn/Web/CSDN/phppost5/php43338.htm
?回復人: yorgo(羽高) ( ) 信譽:99 ?? ?2002-06-12 13:29:37Z ?? ?得分:10
函數調用函數本身
在調用的時候將現有的環境、變量參數壓入棧,然后調用函數本身
函數退出的時候,從棧頂取出壓入的環境、變量參數,然后完成上一個函數的調用。直到棧為空,函數停
止運行,退出
回復人: dongfangran(東方冉) ( ) 信譽:95 ?? ?2002-06-13 16:22:25Z ?? ?得分:20
?? ?清華大學出的那本〉《數據結構》 上有關棧的那一章用棧把第歸說得很詳細。不妨看一下。
遞歸函數內部的原理????不要跟我講自己調用自己這樣的話,我一分也不會給你的
http://www.csdnback.com/ForumsView/t/20020613/12/800443.html
quote:
系統根本就不管你是不是遞歸函數,他也不可能知道. ?
? 他只是在有函數調用的時候,把"主程序"的信息壓入棧,然后調用函數,執行完后再把"主程序"的信息從
棧里彈出來,恢復. ?
? 也就是說,遞歸其實是一種函數調用的"技巧",只不過這種技巧很基本罷了.
呵呵,盡管你不想聽到“自己調用自己”這樣的話,我還是要說:就是自己調用自己的一個過程。請看下
: ?
? void?? fun() ?
? { ?
??? .. ?
??? fun(); ?
??? .. ?
? } ?
? ?
? 當執行到fun時,發生調用,特別的是這里是調用它本身。在函數的調用處理中,不同的語言會有
不同的處理方式,這一點在編譯原理的課程中講到的比較多,分配策略有:靜態分配,棧式分配,堆式分
配三種。 ?
? 在過程執行時,系統使用的一個連續存儲塊,稱為活動記錄。我現就C語言的調用特點說一下活動
記錄。在C語言中,當發生函數調用時,就產生了一個過程的新的活動記錄,這些信息被壓入棧中保存,
以便此函數執行完畢時返回時用。當函數返回時,當前記錄的內容有: ?
? ?
? | 連接數據 | ?
? | 返回地址 | ?
? | 動態鏈 | ?
? | 靜態鏈 | ?
? | 形式單元 | ?
? | 局部數據 | ?
? ?? ------- ?
? 針對一個C程序而言,其整體的棧分配方式為: ?
? ?
? | main調用的函數調用的其它函數(包括自己)的活動記錄| ?
? | main調用的函數的活動記錄 | ?
? | main的活動記錄 | ?
? | 全局數據區 | ?
? ?? --------------------------- ?
? ?
? 不知我講明白了沒有?:)
在人工實現遞遞歸函數,并不一定要將現場數據(返回點及參數)放到棧(stack)里,我們完全可以將它們
放在可用空間更大的堆(heap)中。不過由程序自動實現時,則如上各位所說的,一定是放在stack中的
,否則編程時也不會那么容易出現‘stack?? overflow'錯了。? ?