第一章 遞推演算法

2021-09-27 08:53:27 字數 2509 閱讀 6621

解題方法:

在已知條件和所求問題之間總存在著某種相互聯絡的關係,關鍵是前後過程之間的數量關係(即遞推式),然後進行順推或逆推。

1.求斐波那契數列的前n項和

fibonacci 數列:0,1,1,2,3,5,8,13,21,34,……

f0= 0

f1= 1

fn= fn-1 + fn-2 ( n>= 2 )

關鍵**

int n, i, a0, a1 ;

cout << "n = " ;

cin >> n ;

a0 = 0 ; a1 = 1 ;

cout << a0 << " "<< a1 << " ";

for ( i = 2; i <= n/2 ; i ++ )

if ( n > (i-1)*2 ) cout<< a0+a1 << endl ; 如果n是奇數就要把最後乙個輸出

return 0;

2.求n層漢諾塔的移動次數遞推關係分析:

f(n)=2*f(n-1)+1

邊界條件:f(1)=1

int f[1000]=;

int n;

cin>>n;

for(int i=2;i<=n;i++)

f[i]=2*f[i-1]+1;

cout<3.猴子吃桃問題

猴子第一天採摘了一些桃子,第二天吃了第一天的一半多乙個,第三天吃了第二天的一半多乙個…直到第十天就剩下乙個。問:猴子第一天摘了多少桃子?

遞推關係:

f(n-1)=(f(n)+1)*2

邊界條件:f(10)=1

int f[11];

f[10]=1;

for(int i=9;i>=1;i--)

f[i]=2*(f[i+1]+1);

cout<4.數字三角形

順推法#include #include using namespace std;

const int maxn = 1005;

int a[maxn][maxn],f[maxn][maxn],n;

int main()

逆推法#include #include using namespace std;

const int maxn = 1005;

int a[maxn][maxn],f[maxn][maxn],n;

int max(int a,int b)

int main()

5. 有 2n 的乙個長方形方格,用乙個12 的骨牌鋪滿方格。*

7.吃糖果名名的媽媽從外地出差回來,帶了一盒好吃又精美的巧克力給名名(盒內共有 n 塊巧克力,20 > n >0)。

媽媽告訴名名每天可以吃一塊或者兩塊巧克力。假設名名每天都吃巧克力,問名名共有多少種不同的吃完巧克力的方案。

#include

using

namespace std;

intmain()

; f[1]

=1; f[2]

=2;for

(int i =

3; i <=

20; i++

)int n;

while

(cin >> n)

return0;

}

8.昆蟲繁殖每對成蟲過x個月產y對卵,每對卵要過兩個月長成成蟲。

假設每個成蟲不死,第乙個月只有一對成蟲,且卵長成成蟲後的第乙個月不產卵(過x個月產卵).

問過z個月以後,共有成蟲多少對?

第一章 遞推演算法

特點 乙個問題的求解需一系列的計算,在已知條件和所求問題之間總存在著某種相互聯絡的關係,如果可以找到前後過程之間的數量關係 即遞推式 那麼,從問題出發逐步推到已知條件,此種方法叫逆推。無論順推還是逆推,其關鍵是要找到遞推式。猴子吃桃 遞推關係 f n f n 1 2 1 f n 1 f n 1 2 ...

第一章 遞推演算法

遞推法是一種重要的數學方法,在數學的各個領域中都有廣泛的運用,也是計算機用於數值計算的乙個重要算。特點 在已知條件和所求問題之間總存在著某種相互聯絡的關係,如果可以找到前後過程之間的數量關係 即遞推式 那麼,從問題出發逐步推到已知條件,此種方法叫逆推。無論順推還是逆推,其關鍵是要找到遞推式。fibo...

演算法基礎第一章

不同常數時間的操作 加或定址運算或位運算 執行時間不一樣 選擇最小的數,放到陣列的第乙個位置 時間複雜度 c n c n 1 c n 2 c 1 o n 2 額外空間複雜度 o 1 兩兩比較並交換,直到無交換 時間複雜度 o n 2 額外空間複雜度 o 1 左邊序列有序,右邊新加入乙個數,從右往左找...