第一篇 遞推思想

<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 }
複製代碼

相關文章
相關標籤/搜索