遞迴演算法要素
遞迴演算法的三個要素。每次寫遞迴,都按照這三要素來寫,可以保證寫出正確的遞迴演算法!
1. 確定遞迴函式的引數和返回值:
確定哪些引數是遞迴的過程中需要處理的,那麼就在遞迴函式里加上這個引數, 並且還要明確每次遞迴的返回值是什麼進而確定遞迴函式的返回型別。
2. 確定終止條件:
寫完了遞迴演算法, 執行的時候,經常會遇到棧溢位的錯誤,就是沒寫終止條件或者終止條件寫的不對,作業系統也是用一個棧的結構來儲存每一層遞迴的資訊,如果遞迴沒有終止,作業系統的記憶體棧必然就會溢位。
3. 確定單層遞迴的邏輯:
確定每一層遞迴需要處理的資訊。在這裡也就會重複呼叫自己來實現遞迴的過程。
以下以二叉樹前序遍歷為例:
確定遞迴函式的引數和返回值:因為要列印出前序遍歷節點的數值,所以引數裡需要傳入vector在放節點的數值,除了這一點就不需要在處理什麼資料了也不需要有返回值,所以遞迴函式返回型別就是void,程式碼如下:
void traversal(TreeNode* cur, vector<int>& vec)
確定終止條件:在遞迴的過程中,如何算是遞迴結束了呢,當然是當前遍歷的節點是空了,那麼本層遞迴就要要結束了,所以如果當前遍歷的這個節點是空,就直接return,程式碼如下:
if (cur == NULL) return;
確定單層遞迴的邏輯:前序遍歷是中左右的循序,所以在單層遞迴的邏輯,是要先取中節點的數值,程式碼如下:
vec.push_back(cur->val); // 中
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
相關文章
- 遞迴三要素遞迴
- 遞迴演算法遞迴演算法
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 【演算法】遞迴演算法演算法遞迴
- Java遞迴演算法Java遞迴演算法
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 演算法初探--遞迴演算法演算法遞迴
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- 淺談遞迴演算法遞迴演算法
- JavaScript演算法之遞迴JavaScript演算法遞迴
- 每日一演算法:遞迴演算法遞迴
- Python遞迴演算法詳解Python遞迴演算法
- 遞迴 & 分治演算法深度理解遞迴演算法
- Java遞迴演算法的使用Java遞迴演算法
- 演算法分析__遞迴跟蹤演算法遞迴
- Python進階-演算法-遞迴Python演算法遞迴
- 遞迴和尾遞迴遞迴
- 【電腦科學】演算法——遞迴演算法遞迴
- 遞迴與分治演算法練習遞迴演算法
- 二十一、氣泡排序演算法——JAVA實現(遞迴與非遞迴)排序演算法Java遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 快速排序【遞迴】【非遞迴】排序遞迴
- 資料結構和演算法:遞迴資料結構演算法遞迴
- 資料結構與演算法:遞迴資料結構演算法遞迴
- 10.遞迴演算法最佳解析遞迴演算法
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴
- 五大演算法程式碼模板(DFS 遞迴非遞迴都算上,是六個)演算法遞迴
- 資料結構與演算法(十一)——演算法-遞迴資料結構演算法遞迴
- 遞迴遞迴
- 漢諾塔的圖解遞迴演算法圖解遞迴演算法
- C# 面試常見遞迴演算法C#面試遞迴演算法
- 遞迴演算法的時間複雜度遞迴演算法時間複雜度
- 幾種常見的JS遞迴演算法JS遞迴演算法
- 二十、快速排序演算法——JAVA實現(遞迴)排序演算法Java遞迴
- 什麼是遞迴?遞迴和迴圈的異同遞迴
- 「演算法之美系列」遞迴與回溯(JS版)演算法遞迴JS
- 遞迴演算法實踐---實現排列組合遞迴演算法
- 解讀:什麼是Java的遞迴演算法?Java遞迴演算法