程式直接或間接呼叫自身的程式設計技巧
乙個過程或函式在其定義或說明中又直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。
遞迴需要有邊界條件、遞迴前進段和遞迴返回段。
fibonacci數列:
當n=0,1時,f(n) = 1;
當n>1時,f(n) = f(n-1) + f(n-2);
fibonacci數列的遞迴演算法
int fib(int n)
fibonacci數列的遞推演算法
int fib[50]; //採用陣列儲存中間結果
void fibonacci(int n)
整數劃分問題整數劃分問題是演算法中的乙個經典命題之一。把乙個正整數n表示成一系列正整數之和:
正整數n的這種表示稱為正整數n的劃分。正整數n的不同劃分個數稱為正整數n的劃分數,記作 p(n) 。
分析:當n=1時,無論m為什麼值,只有一種劃分。f(1,m) = 1, m>=1.
當m=1時,無論n的值為什麼,只有一種劃分。f(n,1) = 1, n>=1。
當m>=n時,最大加數實際上不能超過n。f(n,m)=f(n,n)。
當n=m時,f(n,n) = 1 + f(n,n-1)。
當n>m時,f(n,m) = f(n,m-1) + f(n-m,m)。
#include using namespace std;
int fen(int n,int k)
int main()
遞迴與分治策略
1 全排列問題 設r n 是要進行排列的n個元素。集合x中元素的全排列記為perm x 求r n 的全排列perm r n 用遞迴演算法求解 1 找出遞迴子結構性質 即原問題的解包含了子問題的解,且子問題的描述與原問題相同。這就可以用子問題的解來構造原問題的解。設r i r n 這是乙個子問題。設 ...
遞迴與分治策略
1.遞迴 直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。1 階乘函式 include using namespace std int main int factorial int n 2 fibonacci數列 include using namespace st...
分治策略與遞迴
先看 資料結構與演算法分析 中對分治策略的解釋 把問題分成兩個大致相等的子問題,然後再遞迴地對他們進行求解,這是 分 治 階段將兩個子問題的解合併到一起並可能再做些少量的附加工作,最後得到整個問題的解。由定義可以看出,分治需要進行兩步操作 分 將問題恰當的劃分為需要迭代處理的兩個子問題,治 將兩個子...