簡介:任何乙個可以用計算機求解的問題所需的計算時間都與其規模n有關。問題的規模越小,越容易直接求解,解題所需的計算時間也越少。
分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。
如果原問題可分割成k個子問題(1<k≤n),且這些子問題都可解,並可利用這些子問題的解求出原問題的解,那麼這種分治法就是可行的。
由分治法產生的子問題往往是原問題的較小模式,這就為使用遞迴技術提供了方便。
fibonacci數列的遞迴演算法:
該演算法的效率非常低,因為重複遞迴的次數太多。int
fib(
int n)
fibonacci數列的遞推演算法:
設r= 是要進行排列的n個元素,顯然共有n!種排列。int fib[50]
;void
fibonacci
(int n)
令ri=r-。集合x中元素的全排列記為perm(x),則(ri)perm(x) 表示在全
排列perm(x)的每乙個排列前加上字首ri得到的排列。
r的全排列可歸納定義如下:
當n=1時,perm(r)=(r), 其中r是集合r中唯一的元素;
當n>1時,perm(r) 由(r1)perm(r1),(r2)perm(r2), ···,(rn )perm(n)構成。
依此遞迴定義,可設計產生perm(r)的遞迴演算法。
演算法:
整數劃分問題是演算法中的乙個經典命題之一。把乙個正整數n表示成一系列正整數之和;#include
using
namespace std;
void
perm
(int list,
int k,
int m)
cout<}else}}
intmain()
;perm
(a,2,4
);for(
int i=
2;i<=
4;i++
)}
正整數n的這種表示稱為正整數n的劃分。正整數n的不同劃分個數稱為正整數n的劃分數,記作p(n) 。
正整數6有如下11種不同的劃分,所以 。
65+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1
演算法分析:
如果中的最大加數s不超過m,即s=max(n1,n2, … ni)≤m,則稱它屬於n的乙個m劃分。我們記n的m劃分的個數為f(n,m)。該問題就轉化為求n的所有劃分個數f(n, n)。我們可以建立f(n, m)的遞迴關係:
1、f(1,m)=1, m≥1
當n=1時,不論m的值為多少(m>0),只有一種劃分即1個1。
2、f(n,1)=1, n≥1
當m=1時,不論n的值為多少(n>0),只有一種劃分即n個1。
3、f(n,m)= f(n,n), m≥n
最大加數s實際上不能超過n。例如,f(3,5)= f(3, 3)。
4、f(n,n)=1+ f(n,n-1)
正整數n的劃分是由s=n的劃分和s≤n-1的劃分構成。例如,f(6,6)=1+ f(6,5)。
5、 f(n,m)= f(n,m-1)+ f(n-m, m),n>m> 1
正整數n的最大加數s不大於m的劃分,是由s =m的劃分和s≤m - 1的劃分組成。
概念:#include
using
namespace std;
intsplit
(int n,
int m)
else
if(nelse
if(n==m)
else
}int
main()
• 遞迴樹是迭代計算的模型.
• 遞迴樹的生成過程與迭代過程一致.
• 遞迴樹上所有項恰好是迭代之後產
生和式中的項.
• 對遞迴樹上的項求和就是迭代後方
程的解.
生成規則:
• 初始,遞迴樹只有根結點, 其值為w(n)
• 不斷繼續下述過程:
將函式項葉結點的迭代式w(m)表示成二 層子樹
用該子樹替換該葉結點
• 繼續遞迴樹的生成,直到樹中無函式項
(只有初值)為止.
演算法分析與設計3 遞迴
任何乙個可以用計算機求解的問題所需的計算時間都與其規模n有關。問題的規模越小,越容易直接求解,解題所需的計算時間也越少。分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。如果原問題可分割成k個子問題 1 k n 且這些子問題都可解,並可利用這些子問...
演算法之遞迴(3) 鍊錶操作
演算法之遞迴 3 鍊錶操作 遞迴 2 嘗試了乙個單鏈表的遍歷,同時又分析了如何新增自己的操作,是在遞迴呼叫之前,還是在遞迴呼叫之後。今天,打算將問題深入一下,即新增相應的操作在遞迴的過程中。解法一 逐層遞迴,遍歷到最後乙個節點,並從返回的節點一次向後遞迴,遍歷n次,找到倒數第n個節點。private...
演算法 遞迴演算法
遞迴演算法的概念,就是通過不斷地呼叫自身,最終達到解決問題的目的。遞迴有兩個點需要注意 1.要不斷的呼叫自身 2.這個遞迴要有出口,不能成為死迴圈 看下面的例子。很多介紹遞迴演算法的,都會用遞迴來做乙個題目 計算乙個數的階層。例如 計算5的階層,5 5 x 4 x 3 x 2 x 1 用遞迴來實現 ...