數據結構學習(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'錯了。? ?