一.倒推法
例1:儲油點
每次送油到儲存點,因為每次從n+1處出發至n處時都是攜帶500公升油,往返次數越少說明花掉的油最少。
int main()
{ int k,d; //k為儲油點位置序號,d為累計終點至當前儲油點的距離
int oil[10],dis[10]; //儲油點的油量和離終點的距離
int i; //輔助變數
k=1;d=500;
oil[1]=500;
dis[1]=500;
cout<<"no."<二.順推法
例2.實數數列
乙個實數數列共有n項
已知a[i]=(a[i-1]-a[i+1])/2+d (1
鍵盤輸入 n,a[1], a[n], d, m 求a[m].
解:
轉化得:
a[i]=
1*a[i-2] -2*a[i-1]+2*d
把所有的a[i]都轉化成a[i]=p[i]*a[1]+q[i]*a[2]+r[i]*d
a[1]=1*a[1]+0*a[2]+0*d=(1,0,0)
a[2]=0*a[1]+1*a[2]+0*d=(0,1,0)
a[3]=1*a[1] -2*a[2]+2*d=(1,-2,2)……
a[i]=1*a[i-2] -2*a[i-1]+2*d=(p[i],q[i],r[i])
int calculate(int n,int d, int a1,int an,int m)
{ float *a=new float[n+1];
int i;
memset(a,0,sizeof(float)*(n+1));
a[1]=a1;
a[n]=an;
int *p=new int[n+1],*q=new int[n+1],*r=new int[n+1]; //p*a1+q*a2+r*d=a[n]
p[1]=1;q[1]=0;r[1]=0;
p[2]=0;q[2]=1;r[2]=0;
cout<<"a[1]=("<
演算法設計 之 遞推法
遞推法就是根據已知條件,分析推導出問題中的聯絡,然後一步一步進行推倒直至得到結果。根據具體問題我們需要選擇是正推還是逆推來解決問題。下面先舉乙個遞推中的經典例子,就是求兔子數量的問題 現有乙隻乙個月大的兔子,已知當兔子在第三個月大時每月就可以生下乙隻小兔子 好吧,就按兔子是無性繁殖的 求一年後兔子的...
實用演算法 基礎演算法 遞推法 01
推關係式 fn g f n 1 這就在數的序列中,建立起後項和前項之間的關係,然後從初始條件 或最終結果 入手,一步步地按遞推關係遞推,直至求出最終結果 或初始值 很多程式就是按這樣的方法逐步求解的。如果對乙個試題,我們要是能找到後一項與前一項的關係並清楚其起始條件 最終結果 問題就好解決,讓計算機...
常用演算法 遞推法
遞推法是利用問題本身所具有的一種遞推關係求問題解的一種方法。設要求問題規模為n的解,當n 1時,解或為已知,或能非常方便地得到解。能採用遞推法構 造演算法的問題有重要的遞推性質,即當得到問題規模為i 1的解後,由問題的遞推性質,能從已求得的規模為1,2,i 1的一系列解,構造出問題規模為 i的解。這...