递推思想 算法洗脑系列(8篇)——第一篇 递推思想

原文参考如下:

算法洗脑系列(8篇)——第一篇 递推思想 


今晚主演学的是‘递推思想‘’

1.概念: 
  通过已知条件,利用特定关系逐步递推,最终得到结果为止,核心就是不断的利用现有信息推导出新的东西。

2.分类:“顺推”和“逆推“

    顺推:从条件推出结果。

(就好比你知道26个字母的顺序,A的下一个可以推出B;已经知道公式和参数,可以确切的得到结果)

    逆推:从结果推出条件。

(已经知道公式和结果,要推导确切的参数)

3. 

<1> 顺推的例子 :“斐波那契”数列,说的是繁殖兔子的问题:

如果1对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月就可以生1对小兔子,如果从1对初生的小兔子开始,1年后能

繁殖多少兔子?

思路:其实这个问题我们可以将兔子划分为“1月大的兔子“,”2月大的兔子“,”3月大的兔子“。

        ① 初始时:            一对1月大小兔子,总数为1对。

        ② 第一个月:         1月大的小兔子变成2月大的兔子,总数还是1对。

        ③ 第二个月:         2月大的小兔子变成3月大的兔子,繁殖了一对小兔子,总数为2对。

        ④ 第三个月:         3月大的兔子tmd有生了一对小兔子,上个月1月大的小兔子变成了2月大的兔子,总数为3对。

         ......                    ......

        F0=1

        F1=1

        F2=F0+F1

        F3=F1+F2

        ......

Fn=Fn-2+Fn-1

month = 12
fab = [1, 1]
for i in range(2, month):
    fab.append(fab[i - 2] + fab[i - 1])
for i in range(len(fab)):
    print('i:{}'.format(fab[i]))

<2> 逆推的例子

       这个一个关于存钱的问题,一个富二代给他儿子的四年大学生活存一笔钱,富三代每月只能取3k作为下个月的生活费,采用的是整存零取的方式。

年利率在1.71%(产生的利息就是他的3K零用钱),请问富二代需要一次性存入多少钱。

思路: 这个题目是我们知道了结果,需要逆推条件, 第48月富三代要连本带息的把3k一把取走,那么

        第47月存款应为: (第48个月的存款+3000)/(1+0.0171/12(月));

        第46月存款应为: (第47个月的存款+3000)/(1+0.0171/12(月));

         .....                    .....

        第1个月存款应为: (第2个月的存款+3000)/(1+0.0171/12(月));

  

duration = [0] * 48
rate = 0.0171
print(rate / 12)
for i in range(len(duration) - 1, -1, -1):
    duration[i - 1] = (duration[i] + 3000) / (1 + rate / 12)
    print(duration[i - 1])
    print(i)
for i in range(len(duration) - 1, -1, -1):
    print("第{}个月末本利合计:{}".format(i + 1, round(duration[i], 2)))

猜你喜欢

转载自www.cnblogs.com/originalTblog/p/11717490.html
今日推荐