資料結構與演算法(十一)遞迴

2021-10-02 09:56:04 字數 1140 閱讀 7667

什麼是遞迴?

程式呼叫自身的程式設計技巧稱為遞迴(recursion)。遞迴作為一種演算法在程式語言中廣泛使用。乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉換為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少程式的**量。遞迴的能力在於用有限的語句來定義物件的無線集合。

一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。

前進段其實就是遞迴思想的轉換部分,把乙個大型複雜的問題層層轉換為乙個與原問題相似的規模較小的問題來求解,這個思想與分治演算法思想相同,分治演算法不同於氣泡排序、選擇排序等演算法,它沒有具體的操作流程,它是解決問題的一種思想。

當我們求解某些問題時,由於這些問題要處理的資料相當多,或求解過程相當複雜,使得直接求解方法在時間上相當長,或者根本無法直接求出。對於這類問題,我們往往先把它分解成幾個子問題,找到求出這幾個子問題的解法後,再找到合適的方式,把它們組合成求整個問題的解法。如果這些子問題還較大,難以解決,可以再把它們分成幾個更小的子問題,以此類推,直至可以直接求出解為止。這就是分治演算法的基本思想,分而治之。

回溯演算法實際上是乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就「回溯」返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就回退再走的技術稱為回溯法,而滿足回溯條件的某個狀態的點稱為「回溯」點。許多複雜的,規模較大的問題都可以使用回溯法,有「通用解題方法」的美稱。

簡單來說,迴圈是有去無回,而遞迴則是有去有回(因為存在終止條件)。

舉個例子,你用你手中的鑰匙開啟一扇門,結果去發現前面還有一扇門,緊接著你又用鑰匙開啟了這扇門,然後你又看到一扇門…但是當你開到某扇門時,發現前方是一堵牆無路可走了,你選擇原路返回——這就是遞迴

但是如果你開啟一扇門後,同樣發現前方也有一扇們,緊接著你又開啟下一扇門…直到開啟最後一扇門出去,或者一直沒有碰到盡頭 (死迴圈)——這就是迴圈。

最後從以下幾個方面概括遞迴:

資料結構與演算法 遞迴

一 概念 遞迴是一種高效 簡介的編碼技巧,一種應用很廣泛的演算法,比如dfs深度優先搜尋,前中後序二叉樹遍歷等都是使用遞迴。方法或函式呼叫自身的方式成為遞迴呼叫,呼叫稱為遞,返回成為歸 所有遞迴問題都可以用遞迴公式來表示 二 遞迴優缺點 優點 簡潔 缺點 堆疊溢位風險 可根據調整遞迴呼叫的最大深度來...

資料結構與演算法(十一) 串

iwehdio的 如何評測串匹配演算法的效能?蠻力匹配 版本2 int match char p,char t if j m break 找到匹配子串 return i 唯一的區別就是版本1中i指向文字t中進行比較的位置,版本2中i指向模式t開始比較的位置。最壞情況下可達到o m n 低效的原因在於...

資料結構與演算法 認識遞迴

淺識 1 遞迴與迴圈 理論上,任何迴圈都可以重寫為遞迴形式 有些語言沒有迴圈語句,只能使用遞迴。2 迴圈改遞迴 1 發現邏輯 相似性 2 一定要有 出口 不然就會死迴圈 3 構造相似性 如果沒有明顯的相似性,可能是缺少引數,需要主動構造,與遞推類似 4 遞迴呼叫 1 遞迴呼叫僅僅是被調函式正好是主調...