遞迴是一種重要的方法,這不是一種演算法,像迴圈和選擇一樣是組成演算法的乙個部分。
簡單來說遞迴就是乙個函式呼叫了自己。
例如
voidf(
)
當乙個程序呼叫函式時,當前程序就會暫停,進而去執行被呼叫函式,知道被呼叫函式結束,則繼續執行當前程序。
所以如果簡單的呼叫自己,那麼這個被呼叫的「自己會繼續去呼叫「自己」」,所巢狀的程序越來越多,這是乙個死迴圈,這是我們不想看到的。
為了防止這種情況發生,遞迴函式一定會設定乙個函式出口,用於結束某一層的遞迴,出口的設定取決於演算法思路。
例如
voidf(
簡單來說遞迴可以將演算法中的大問題拆解為許多具有遞迴性質的小問題解決。
何為遞迴性質?大問題拆解為小問題的方法與小問題拆解為更小問題的方法一致。
(1)遞迴表示式推導出的問題,例如斐波那契數列,楊輝三角,階乘……
(2)遞迴方法解決的問題,例如漢諾塔問題,這類問題只能通過遞迴解決……
(3)具有遞迴性質的資料結構的問題,例如:二叉樹(子樹是遞迴性的),鍊錶(後繼是遞迴性的)
遞迴與迴圈是解決問題的兩種方法,遞迴通常淺顯的描述了問題的解決方法,使得程式非常易懂,也是最好想到的問題解決方法;迴圈是對乙個步驟的重複操作,解決問題往往不會清晰的看到問題的解決方法。
遞迴與迴圈並無優劣之分,各有優勢也各有劣勢。
遞迴雖然簡單但是往往需要消耗大量記憶體,因為每一次進行函式呼叫都需要暫停當前程序,開啟乙個新的程序,大量的函式巢狀會大大增加執行成本。(一般程式設計軟體都要求遞迴程序不能超過100層)
所以在一些時間複雜度的限制,我們會將遞迴轉化為迴圈解決(基本所有的遞迴都可以用迴圈解決),這需要迴圈與棧堆的結合運用。
試題 基礎練習 fj的字串
藍橋杯真題:十字圖
藍橋杯學習記錄2
楊輝三角 楊輝三角形又稱pascal三角形,它的第i 1行是 a b i的展開式的係數。它的乙個重要性質是 三角形中的每個數字等於它兩肩上的數字相加。下面給出了楊輝三角形的前4行 1 11 2 1 1 3 3 1 給出n,輸出它的前n行 解題思路 在解決楊輝三角問題時,關鍵在於是否找到了楊輝三角的規...
藍橋杯 遞迴問題
深入遞推,逐級回退 遞迴問題 深搜dfs 在有條件的情況下試探各種情況 找出口 遞迴的終止條件 遞迴函式引數邊界值的界定 思想 1.src上的n 1個盤子移到medium 2.src剩下的乙個最大的盤子移到dest 3.medium上的n 1個盤子移到dest 把src最上面的乙個盤子移到dest ...
藍橋杯 遞迴 2 24
回形取數 藍橋杯 基礎練習 問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣...