3 3棧與遞迴的實現

2021-06-17 20:29:39 字數 798 閱讀 3385

棧還有乙個重要的應用是在程式語言中實現遞迴。

遞迴是程式設計中乙個強有力的工具。其一,很多數學函式是遞迴定義的;其二,有些資料結構,如二叉樹、廣義表等,它們本身的結構有遞迴特性,則它們的操作可遞迴

地描述;其三,雖然有些問題本身沒有明顯的遞迴結構,但是利用遞迴比利用迭代求解更簡單,如八皇后問題、hannoi塔問題等。

在高階語言編制的程式中,呼叫函式和被呼叫函式之間的鏈結及資訊傳遞需通過棧來進行。

通常,乙個函式在執行時呼叫另乙個函式,在執行被呼叫函式之前,系統需完成3件事:1.  將所有的實在引數、返回位址等資訊傳遞給被呼叫函式;2. 為被呼叫函式的區域性變數分配儲存區;3. 將控制轉移到被呼叫函式的入口。

當有多個函式巢狀呼叫時,按照」後呼叫先返回「的原則,上述函式之間的資訊傳遞和控制轉移必須通過」棧「來完成,即系統將整個程式執行時所需要的資料空間安排在乙個棧中,每當呼叫乙個函式時,就在棧頂中分配乙個儲存區,每當呼叫結束返回時,就釋放它的儲存區。

同樣,遞迴也是函式呼叫所以也需要乙個」遞迴工作棧「來作為整個遞迴函式執行期間使用的資料儲存區。每一次遞迴所需資訊構成乙個」工作記錄「其中包括所有的實在引數、區域性變數和返回位址等。每進入一層遞迴,就會產生乙個新的工作記錄壓入棧頂。每退出一層就會從棧頂彈出乙個工作記錄。

遞迴優點:遞迴函式結構清晰,程式易讀,而且它的正確性容易得到證明,因此,利用允許遞迴的語言(例如 c 語言)進行程式設計時,給使用者編寫程式和除錯程式帶來很大方便。因為,對這樣一類遞迴問題程式設計時,不需要使用者自己而由系統來管理遞迴工作棧。

棧與遞迴的實現

對於棧有些問題還不是很熟悉,所以暫時需要些時間去理解,需要多寫些 去體會,棧還有乙個重要應用是在程式語言中實現遞迴,所以這次主要是講遞迴的實現,大家熟悉的階乘函式,2階fibonacci數列和ackerman函式等,其次還有的資料結構,如二叉樹 廣義表等,由於結構本身固有的遞迴特性,則它們的操作可遞...

棧與遞迴的實現

對於棧有些問題還不是很熟悉,所以暫時需要些時間去理解,需要多寫些 去體會,棧還有乙個重要應用是在程式語言中實現遞迴,所以這次主要是講遞迴的實現,大家熟悉的階乘函式,2階fibonacci數列和ackerman函式等,其次還有的資料結構,如二叉樹 廣義表等,由於結構本身固有的遞迴特性,則它們的操作可遞...

棧與遞迴實現迷宮問題求

在學習了資料結構的棧和佇列的相關知識以後,我接觸到了棧的一些應用,其中迷宮問題就是一種棧的應用。在這個迷宮中我們認為0是可以通過的路徑,而1就相當於牆,是不可以通過的。基本的實現方法其實是蠻簡單的,我們知道棧的特點就是先進後出,後進先出,所以,當我們從入口開始,將可以通過的路徑的座標壓棧,壓入棧中,...