遞迴與分治 待續

2021-08-17 14:32:39 字數 656 閱讀 3105

直接或者間接呼叫自身的演算法成為遞迴演算法,用函式自身給出定義的函式稱為遞迴函式。

分治法的設計思想是:把乙個難以解決的大問題,分割成多個規模較小的相同問題,以便各個擊破,分而治之。其中子問題不可以重疊,否則一般使用動態規劃的思想。

分治主要步驟為:分割(常使用均分(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...