一: 概念
通過已知條件,利用特定關係逐步遞推,最終得到結果為止,核心就是不斷的利用現有資訊推導出新的東西。
二:分類
當然遞推中有兩種,「順推」和「逆推「
順推:從條件推出結果。
逆推:從結果推出條件。
三: 舉例
<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
大家看看,是不是體現了」遞推「的核心思想,**也很簡單。
1int 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...