解題方法:
在已知條件和所求問題之間總存在著某種相互聯絡的關係,關鍵是前後過程之間的數量關係(即遞推式),然後進行順推或逆推。
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 左邊序列有序,右邊新加入乙個數,從右往左找...