演算法之遞推思想

2021-07-03 22:01:51 字數 1927 閱讀 9463

一: 概念

通過已知條件,利用特定關係逐步遞推,最終得到結果為止,核心就是不斷的利用現有資訊推導出新的東西。

二:分類

當然遞推中有兩種,「順推」和「逆推「

順推:從條件推出結果。

逆推:從結果推出條件。

三: 舉例

<1> 順推的例子

上過大學的應該都知道著名的「斐波那契」數列吧,說的是繁殖兔子的問題,題目我就大概說一下。

如果1對兔子每月能生1對小兔子,而每對小兔在它出生後的第3個月就可以生1對小兔子,如果從1對初生的小兔子開始,1年後能

繁殖多少兔子?

思路:其實這個問題我們可以將兔子劃分為「1月大的兔子「,」2月大的兔子「,」3月大的兔子「。

① 初始時:            一對1月大小兔子,總數為1對。

② 第乙個月:         1月大的小兔子變成2月大的兔子,總數還是1對。

③ 第二個月:         2月大的小兔子變成3月大的兔子,繁殖了一對小兔子,總數為2對。

④ 第三個月:         3月大的兔子***有生了一對小兔子,上個月1月大的小兔子變成了2月大的兔子,總數為3對。

f0=1

f1=1

f2=f0+f1

f3=f1+f2

fn=fn-2+fn-1

大家看看,是不是體現了」遞推「的核心思想,**也很簡單。

1

int month = 12;23

int fab = new

int[month];

45 fab[0] = 1;

67 fab[1] = 1;89

//從已知條件出發推出結果

10for (int i = 2; i < month; i++)

11

1415

for (int i = 0; i < month; i++)

16 個月兔子為:

<2> 逆推的例子

這個乙個關於存錢的問題,乙個富二代給他兒子的四年大學生活存一筆錢,富三代每月只能取3k作為下個月的生活費,採用的是整存零取的方式,

年利率在1.71%,請問富二代需要一次性存入多少錢。

思路: 這個題目是我們知道了結果,需要逆推條件, 第48月富三代要連本帶息的把3k一把取走,那麼

第47月存款應為: (第48個月的存款+3000)/(1+0.0171/12(月));

第46月存款應為: (第47個月的存款+3000)/(1+0.0171/12(月));

第1個月存款應為: (第2個月的存款+3000)/(1+0.0171/12(月));

1

//銀行取錢問題

2double month = new

double[49];34

///最後乙個月的連本帶息是3000

5 month[48] = 3000;67

double rate = 0.0171;89

//逆推

10for (int i = 47; i > 0; i--)

11

1415

for (int i = 48; i > 0; i--)

16 個月末本利合計:

來自一線碼農

C 基本演算法思想之遞推演算法思想

遞推演算法是非常常用的演算法思想,在數學計算等場合有著廣泛的應用。遞推演算法適合有明顯公式規律的場合。遞推演算法基本思想 遞推演算法是一種理性思維莫斯的代表,根據已有的資料和關係,逐步推到而得到結果。遞推演算法的執行過程如下 1 根據已知結果和關係,求解中間結果。2 判斷是否達到要求,如果沒有達到,...

演算法之回溯思想

回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,...

基礎演算法之遞推法

一.倒推法 例1 儲油點 每次送油到儲存點,因為每次從n 1處出發至n處時都是攜帶500公升油,往返次數越少說明花掉的油最少。int main int k,d k為儲油點位置序號,d為累計終點至當前儲油點的距離 int oil 10 dis 10 儲油點的油量和離終點的距離 int i 輔助變數 k...