遞迴的應用

2021-08-17 22:56:17 字數 996 閱讀 2201

遞迴是指函式/過程/子程式在執行過程中直接或間接的呼叫自身而產生的重入現象。

在定義乙個過程或函式時出現呼叫本過程或本函式的成分,稱為遞迴。若呼叫自身,稱為直接遞迴。若過程

或函式p呼叫過程或函式q,而q又呼叫p,稱為間接遞迴。

在以下三種情況下,需要用到遞迴的方法。

1. 定義是遞迴的

有些數學公式、數列、樹等的定義是遞迴的。

2. 資料結構是遞迴的

比如單鏈表就是一種遞迴的資料結構。

3. 問題的求解方法是遞迴的

比如漢諾塔問題。

通常,乙個遞迴模型是由遞迴出口和遞迴體兩部分組成的。前者確定遞迴到何時結束;後者確定遞迴求解時

的遞推關係。遞迴思路是把乙個不能或不好直接分解的「大問題」轉換為乙個或幾個「小問題」來解決,再

把這些「小問題」進一步分解為更小的「小問題」來解決,如此分解,直至每個「小問題」都可以直接解決

(此時分解到遞迴出口)。遞迴的分解不是隨意的分解,遞迴分解要保證「大問題」和「小問題」相似,即

求解過程和環境都相似;並且有乙個分解的終點。

遞迴演算法的執行過程分為遞推和回歸兩個階段。在遞推階段,把較複雜的問題的求解(規模為n)推到比原問

題簡單一些的問題(規模小於n)的求解。在回歸階段,當獲得最簡單情況的解後,逐級返回,依次得到稍復

雜問題的解。

遞迴與非遞迴的轉換:

遞迴演算法有兩個基本的特性:

一是對求解某些複雜問題,遞迴演算法分析問題的方法十分有效;

把遞迴演算法轉換為非遞迴演算法有以下三種基本方法。

(1)通過分析,跳過分解過程,直接用迴圈結構的演算法實現求值過程。

比如斐波那契數列遞迴演算法的改寫。

(2)用棧模擬系統的執行時,只儲存必須儲存的資訊,從而用非遞迴演算法替代遞迴演算法直接使用棧儲存中間

結果,從而將遞迴演算法轉化為非遞迴演算法的過程。

(3) 利用棧儲存引數,由於棧的後進先出的特性符合遞迴演算法的執行過程,可以用非遞迴演算法替代遞迴演算法。

遞迴演算法的應用

提起漢諾塔,大家都會想起遞迴程式,大家都知道遞迴程式的實現是用棧來實現的,但是,有些程式是需要用到棧,但是我們還要編寫一棧的資料結構,挺麻煩的,所以,用遞迴程式實現起來是很簡單的!1.學習資料結構時,講到迷宮演算法,是用棧實現的,如果用遞迴演算法實現會更簡單的.掃雷程式也是實行遞迴搜尋的.對於迷宮程...

遞迴的應用(二)

遞迴與回溯 遞迴在程式設計中經常用於回溯演算法的場合 回溯演算法的基本思想 1,從問題的某一狀態出發,搜尋可以達到的所有狀態 2.當某個狀態到達後,可向前後退,並可繼續查詢其他狀態 3.當所有狀態都到達後,回溯演算法結束 程式設計中可以利用函式的活動物件儲存回溯演算法的狀態資料,因此可以利用遞迴完成...

棧的應用 遞迴

棧的作用 更加聚焦在需要關注的問題本身,不需要花精力在陣列下標增減等問題 棧的應用 遞迴 遞迴 自己呼叫自己 迭代實現 include intmain return0 斐波拉其數列的遞迴實現 include intfbi int i int main return0 斐波拉其的遞迴函式 intfbi...