資料結構 遞迴

2021-09-26 07:27:03 字數 622 閱讀 2132

所謂遞迴,就是在乙個函式,過程,或者資料結構的內部,又直接或間接出現定義本身的應用。在以下三種情況中,常常使用遞迴。

比如階乘函式,我們能夠將其分解成幾個小問題來求解,比如求5!,我們可以先求4!,想求4!先求3!,這樣一步步使問題簡化的方法,稱之為分治法。採取分治法求解,需要滿足下面三個條件

1.能夠將乙個問題轉化成新問題,且新問題的解法,處理的物件更小且變化有規律。

2.通過轉化問題變簡單

3.必須有乙個明確的出口,即遞迴的邊界

形如

void p(參數列)

回想一下之前學習的鍊錶,其定義中便使用了其自身,作為指向下乙個元素的指標,這個過程便利用了遞迴,再回想,鍊錶元素的遍歷,直到最後的指標域為空,這一過程,不就剛好符合分治法的三個條件嗎。後面學習的廣義表,二叉樹,dfs,也可採用遞迴。

int hanoi(int n,char a,char b,char c)//注意每次執行遞迴時a,b,c表示的內容實際上發生了改變

}

說來這麼多,最後提一下,

遞迴的時間複雜度為t(n)=nc+t(0)=nc+d=o(n);(通過迭代法可以推出來喲),然後你看遞迴的過程,是不是符合棧「後進先出」的特點呢?

資料 結構 遞迴

遞迴不一定非要像斐波拉契數列一樣在return中呼叫函式 遞迴的結束條件就是初始條件值 通常的方法將遞迴呼叫放在if語句中 n!通過遞迴實現 常用方法還是通過while實現 def jiecheng n if n 0 return 1 else sum n jiecheng n 1 右邊只有階乘表示...

資料結構 遞迴

最近開始學習王爭老師的 資料結構與演算法之美 通過總結再加上自己的思考的形式記錄這門課程,文章主要作為學習歷程的記錄。遞迴是一種非常高效 簡潔的編碼技巧,一種應用非常廣泛的演算法,比如dfs深度優先搜尋 前中後序二叉樹遍歷等都是使用遞迴。基本上所有的遞迴問題都可以用遞推公式來表示。以尋找電影排數為例...

資料結構 遞迴

1.明確這個函式想要幹什麼 例如,我定義了乙個函式,想要算n的階乘 算 n 的階乘 假設n不為0 def f n return none第二要素 尋找遞迴結束條件 所謂遞迴,就是會在函式內部 中,呼叫這個函式本身,所以,我們必須要找出遞迴的結束條件,不然的話,會一直呼叫自己,進入無底洞。也就是說,我...