递推算法思想

2019-11-21  本文已影响0人  CCCCCccccccch

递推算法是一种简单的算法,通过已知条件,利用特定关系得出中间推论,逐步递推,直至得到结果为止。

递推算法可分为顺推法逆推法两种

顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如,斐波那契数列就可以通过顺推法不断递推算出新的数据。

逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。

顺推实例:斐波那契数列

欧洲数学家斐波那契在他的著作《算盘书》中出了一个有趣的题目:如果一对兔子每月能生一对小兔子,而每对小兔子在它出生后的第3个月里,又能开始生一对小兔子,假定在不发生死亡的情况下,由一对初生的兔子开始,1年后能繁殖出多少对兔子?

随月份增加,可以递推出兔子的总数是:1,1,2,3,5,8,13,21……这个数列有十分明显的特点:从第3个数开始,当前数据项为前面相邻两项之和。

这样的数列称为斐波那契数列:fib[i] = fib[i-1] + fib[i-2]

逆推实例:该存多少钱

父亲准备为小龙的四年大学生活一次性在银行储蓄一笔钱,使用整存零取的方式,控制小龙每个月月底只能提取1000元给下个月使用。假设银行一年整存零取的年利息为1.71%,请编程计算出父亲至少需要一次性存入多少钱才够小龙四年生活(四年的利息也计算在内)。

解题思路:

分析存钱和取钱的过程,可以采用逆推的方法。因为是按月取钱,因此把四年分为48个月,每个月分别进行计算。

若在第48个月小龙连本带息要取出1000元,则要求第47个月时银行存款的具体数额为(年利率除以12为月利率):

第47个月月末存款 = 1000/(1 + 0.0171 / 12) 

第46个月月末存款 = (第47个月月末存款 + 1000 )/(1 + 0.0171 / 12) 

第45个月月末存款 = (第46个月月末存款 + 1000 )/(1 + 0.0171 / 12) 

……

第1个月月末存款 = (第2个月月末存款 + 1000 )/(1 + 0.0171 / 12) 

通过以上过程就可以逆推最初要存入多少钱。

上一篇 下一篇

猜你喜欢

热点阅读