演算法入門 遞推

2021-06-27 07:57:49 字數 1298 閱讀 1152

主要思想:

通過已知的條件(已知結果),利用特定的關係,逐步遞推(順推/逆推),直到有解或者無解。

主要分為兩種:順推,從已知條件出發,直至推出解。

逆推,從已知結果出發

,直至推出解。

需要注意的:每一遞推結果,都是下一步遞推的條件。

順推:

斐波那契數列  

f0=0,f1=1,fn=f(n-1)+f(n-2)(n>=2,n∈n*)

例項

兔子的總數有多少?

一對兔子,每月能生一對,而每對兔子3個月後可以生育。求12個月後共有多少兔子。

#include#define num 13

void main();

for(i=2;i分析:首先,可以很明確的知道,這是乙個順推的問題。第乙個月1對,第二個月1對,第三個月2對。。。一次次的遞推。對於順推的問題,主要的就是找到最初條件(1,1,2,3。。。)和特定關係(

fn=f(n-1)+f(n-2)(n>=2,n∈n*)),找到這些,然後根據問題的,進一步完善即可。

程式執行過程分析略。

逆推:

例項

該存多少錢?

要想在大學四年裡的最後乙個月取生活費1000元,期間每個月取1000元,從一開始,就得存多少錢。銀行一年的利率為1.71%。

#include#define fetch 1000 //每個月取1000元

#define rate 0.0171 //銀行的年利率

void main()

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

getch();

}

分析:我們知道最後乙個月即48月取的錢是1000元,那47月的本息和應該為1000/(1+0.0171/12)。在由47月的本息逆推46月的本息:(1000/(1+0.0171/12)) / (1+0.0171/12),由此類推,直至1月為止。那麼這就是乙個典型的逆推問題。由結果出發,推出解。

程式執行過程分析略。

遞推思想只是簡單的演算法入門,講述的也都是一些很基本的東西,不過裡面的思維值得慢慢體會和揣摩。在日常的生活中,我們都經常會不自覺的使用到遞推的思想。把握知其中的本質:從乙個結果,根據特定的條件,推出下乙個結果。那麼有些複雜的事,就會變得很簡單。

入門 遞推 走樓梯

題目 樓梯有n級台階,上樓可以一步上一階,也可以一步上二階。編一程式,計算共有多少種不同走法?輸入 輸入台階的數量n n 50 輸出 輸出走到第n級台階共有多少走法 樣例輸入 樣例輸出 分析 通過觀察易得,走到第一級台階只有一種走法,走到第二級台階有走兩個一級和走乙個二級兩種走法,走到第 台階有三種...

常用演算法 遞推法

遞推法是利用問題本身所具有的一種遞推關係求問題解的一種方法。設要求問題規模為n的解,當n 1時,解或為已知,或能非常方便地得到解。能採用遞推法構 造演算法的問題有重要的遞推性質,即當得到問題規模為i 1的解後,由問題的遞推性質,能從已求得的規模為1,2,i 1的一系列解,構造出問題規模為 i的解。這...

演算法之遞推思想

一 概念 通過已知條件,利用特定關係逐步遞推,最終得到結果為止,核心就是不斷的利用現有資訊推導出新的東西。二 分類 當然遞推中有兩種,順推 和 逆推 順推 從條件推出結果。逆推 從結果推出條件。三 舉例 1 順推的例子 上過大學的應該都知道著名的 斐波那契 數列吧,說的是繁殖兔子的問題,題目我就大概...