直接或者間接呼叫自身的演算法成為遞迴演算法,用函式自身給出定義的函式稱為遞迴函式。
分治法的設計思想是:把乙個難以解決的大問題,分割成多個規模較小的相同問題,以便各個擊破,分而治之。其中子問題不可以重疊,否則一般使用動態規劃的思想。
分治主要步驟為:分割(常使用均分(n/2)或者偏分(n-1)的思想),遞迴架構,合併。
【遞迴】
1,排列問題
若將陣列p中的n個元素進行全排列,陣列p中元素的全排列記做r(p),則r1·r(p)即在全排列r(p)前面加上元素r。
則將其歸納為:
當n=1時,p = ,即r是p中唯一的元素,r(p) = r;
當n>1時,r(p) = r1·r(p1) + r2·r(p2) + ……+rn·r(pn)
以此可設計遞迴演算法如下
//排列問題
#include
#include
#include
using namespace std;
template
void perm(type l,int k, int m)//一共m個字元
cout <}else}}
int main()//以陣列a的後四個數字的全排列為例
;perm(a,1,4);
return 0;
}
分治與遞迴
分治與遞迴 分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。對這k個子問題分別求解。如果子問題的規模仍然不夠小,則再劃分為k個子問題,如此遞迴的進行下去,直到問題規模足夠小,很容易求出其解為止。將求出的小規模的問題的解合併為乙個更大規模的問題的解...
遞迴與分治
一 1 求階乘 int factorial int n 2 fibonacci函式 int fibonacci int n 3 全排列 1 字串的全排列 主函式見 2 int permutation char a,int k,int m permutation arr,0,n 1 return 0 ...
遞迴與分治
fibonacci數列 無窮數列1,1,2,3,5,8,13,21,34,55,稱為fibonacci數列。它可以遞迴地定義為 第n個fibonacci數可遞迴地計算如下 int fibonacci int n 編寫完整的主函式,分別記錄利用上述遞迴函式求第47,48,49,50,51,52個fib...