<1> 順推的例子this
上過大學的應該都知道著名的「斐波那契」數列吧,說的是繁殖兔子的問題,題目我就大概說一下。spa
若是1對兔子每個月能生1對小兔子,而每對小兔在它出生後的第3個月就能夠生1對小兔子,若是從1對初生的小兔子開始,1年後能code
繁殖多少兔子?blog
思路:其實這個問題咱們能夠將兔子劃分爲「1月大的兔子「,」2月大的兔子「,」3月大的兔子「。it
① 初始時: 一對1月大小兔子,總數爲1對。table
② 第一個月: 1月大的小兔子變成2月大的兔子,總數仍是1對。class
③ 第二個月: 2月大的小兔子變成3月大的兔子,繁殖了一對小兔子,總數爲2對。cli
④ 第三個月: 3月大的兔子tmd有生了一對小兔子,上個月1月大的小兔子變成了2月大的兔子,總數爲3對。im
...... ......db
1月份 | 2月份 | 3月份 | 4月份 | 5月份。。。6月份 | |
1個月的兔子 | 1 | 1 | 1 | 2 3 | |
2個月的兔子 | 1 | 1 | 1 2 | ||
>=3個月的兔子 | 1 | 1 | 2 3 |
F0=1
F1=1
F2=F0+F1
F3=F1+F2
......
Fn=Fn-2+Fn-1
你們看看,是否是體現了」遞推「的核心思想,代碼也很簡單。
int month = 12; int[] fab = new int[month]; fab[0] = 1; fab[1] = 1; //從已知條件出發推出結果 for (int i = 2; i < month; i++) { fab[i] = fab[i - 1] + fab[i - 2]; } for (int i = 0; i < month; i++) { Console.WriteLine("第{0}個月兔子爲:{1}", i, fab[i]); }
<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 //銀行取錢問題 2 double[] month = new double[49]; 3 4 ///最後一個月的連本帶息是3000 5 month[48] = 3000; 6 7 double rate = 0.0171; 8 9 //逆推 10 for (int i = 47; i > 0; i--) 11 { 12 month[i] = (month[i + 1] + month[48]) / (1 + rate / 12); 13 } 14 15 for (int i = 48; i > 0; i--) 16 { 17 Console.WriteLine("第{0}個月末本利合計:{1}", i, month[i]); 18 }