基礎演算法之遞推法

2021-09-30 10:32:48 字數 1334 閱讀 2214

一.倒推法

例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的解。這...