第一篇 递推思想

<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 }
复制代码

相关文章
相关标签/搜索