實現遞迴程式設計的方法,需要三步(第2和第3可以同時思考):
明確函式作用是什麼
遞迴的條件表示式
遞迴結束的條件
用三個具體的例子做具體分析:
q1:函式作用是什麼?
計算n的階乘,返回結果—— 確定函式及返回值
long
long
factorial
(int n)
q2:遞迴的條件表示式
factorial(n) = factorial(n-1)*n
long
long
factorial
(int n)
q3: 遞迴結束的條件
factorial(1) = 1;
long
long
factorial
(int n)
最後,對**進行一下整理
long
long
factorial
(int n)
q1:函式作用是什麼?
計算斐波那契數列第n個數,返回結果—— 確定函式及返回值
int
fibonacci
(int n)
q2:遞迴的條件表示式
fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)
int
fibonacci
(int n)
q3: 遞迴結束的條件
fibonacci(1) = 1;
fibonacci(2) = 1;
int
fibonacci
(int n)
注意:這裡只是用fibonacci數列作為例子,實際開發中fibonacci求結果不應該使用遞迴來實現。因為在遞迴過程中,太多運算被重複,時間複雜度變得很誇張,不推薦使用。
q1:函式作用是什麼?
找到二叉樹最大節點,返回這個節點—— 確定函式及返回值
class
treenode};
treenode*
maxnode
(treenode* root)
q2:遞迴的條件表示式
遍歷左子樹,找到最大值。
遍歷右子樹,找到最大值。
比較root,左子樹最大值,右子樹最大值
class
treenode};
treenode*
maxnode
(treenode* root)
q3: 遞迴結束的條件
當某一節點為null時,即其父節點到底,開始回歸。
class
treenode};
treenode*
maxnode
(treenode* root)
上面的**,部分是偽**,進行細節優化
class
treenode};
treenode*
maxnode
(treenode* root)
treenode*
max(treenode* a, treenode* b)
return b;
}
對於上面的max函式,未考慮左右節點均為null情況,看一下原因:
當這種狀況出現時, max(left, right)) 返回null。
然後執行,max(root, null),root肯定不為null,所以不會出現故障報錯。 題目 有n 2的k次方個運動員進行網球迴圈賽,需要設計比賽日程表。每個選手必須與其他n 1個選手個賽一次,每個選手一天只能賽一次,迴圈賽一共進行n 1天。按此要求設計一張比賽日程表,它有n行n 1列,第i行第j列為第i個選手第j天遇到的選手。分析 本題的方法有很多,遞迴是其中一種比較容易理解的方法。... 1 波蘭表示式 字首 本身就是乙個遞迴的定義 像樹一樣 所以用遞迴來寫 定義 滿足如下為波蘭表示式 1 輸入形式為乙個數 a 2 輸入形式為 運算子 波蘭表示式 波蘭表示式 include include includeusing namespace std double exp 讀入並計算逆波蘭表... 程式直接或間接呼叫自身的程式設計技巧稱為遞迴演算法 recursion 直接或間接呼叫自身的函式稱為遞迴函式 它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解。遞迴的基本思想 問題分解 把乙個不能或不好解決的大問題轉化為乙個或幾個小問題,再把這些小問題進一步分解成更小的小問...C程式設計 遞迴呼叫
程式設計2遞迴
程式設計B 遞迴