遞迴與分治

2021-09-24 15:00:21 字數 1464 閱讀 4474

一、

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;

}

4、整數劃分問題

//n為加數,m為加數約束條件(n<=m);q(n,m)即為將最大加數n1不大於m的劃分個數。 

int q(int n,int m)

}

補充:(動態一維陣列的開闢)

#include#include#includeusing namespace std;

int main()

for(int i=0;i>arr[i];

cout

//遞迴演算法

int binarysearch(int a,int key,int low,int high)

int key=0;

cin>>key;

int result=binarysearch(a,key,0,n-1);

cout<2、歸併排序

#include#include #include #include using namespace std;

const int maxn=100;

void merge(int sr,int s,int m,int t)

mergesort(a,0,n-1);

for(int i=0;i3、快速排序

(1)、非隨機化快排

#includeusing namespace std;

int partition(int a,int left,int right)

a[left]=temp;

return left;

}void quicksort(int a,int left,int right)

quicksort(a,0,n-1);

for(int i=0;i(2)、隨機化快排

根據上乙個的主函式改寫partition函式即可,在每一次的開始隨機的選取乙個元素作為主元,這樣的優點時在對已有順序的序列排序時候的效率會很高

//隨機化快排注意新增標頭檔案int randpartition(int a,int left,int right)

a[left]=temp;

return left;

}

分治與遞迴

分治與遞迴 分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。對這k個子問題分別求解。如果子問題的規模仍然不夠小,則再劃分為k個子問題,如此遞迴的進行下去,直到問題規模足夠小,很容易求出其解為止。將求出的小規模的問題的解合併為乙個更大規模的問題的解...

遞迴與分治

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...

分治回溯 遞迴與分治

程式呼叫自身的程式設計技巧稱為遞迴 public static void show 它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 量。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。...