C++課程學習記錄——遞歸
遞歸
概念:
函數直接或間接調用自身的過程
兩個關鍵要素
1.基本情況(遞歸終止條件):遞歸函數中的一個條件,當滿足該條件時遞歸終止,避免無限遞歸。[直接解決極小規模問題的方法]
2.遞歸表達式(遞歸調用):遞歸函數中的語句用於解決極小規模的問題,再將子問題的答案合併成為當前問題的答案。
基本結構
返回類型 函數名(參數列表){
//基本情況(遞歸終止條件)
if(滿足終止條件){
//返回終止條件的結果
}
//遞歸表達式
else{
//將問題分解為規模更小的問題
//使用遞歸調用解決問題
//返回子問題的結果
}
實現:
1.將大問題分解成規模更小的子問題
2.使用遞歸調用解決每一個子問題
3.通過遞歸終止條件來結束遞歸
注意:
1.確保遞歸一定能到遞歸出口,避免無限遞歸導致超時,超內存和運行錯誤
2.考慮邊界條件,有時遞歸出口不止一個
3.避免不必要的重複計算,儘可能優化遞歸函數性能
遞歸和循環的比較
|
遞歸
|
循環
|
|
1.直觀簡潔,易於理解和實現
2.適用於問題規模可以通過遞歸調用不斷減小的情況
3.可以處理複雜的數據結構和算法
4.存在棧溢出風險
(棧空間一般只有8MB,所以遞歸層數不易過深,一般不超過1e6層)
|
1.直接控制流程效率更高
2.適用於問題規模沒有明顯的縮減,或者需要特定的迭代次數
3.適合處理大部分動態規劃問題
|
在部分情況下遞歸和循環可以互相轉化。
以上就是遞歸部分內容了。
愛心 愛心