递推

概念

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

分类

  1. 顺推:从条件推出结果
  2. 逆推:从结果推出条件

举例

  1. 顺推的例子

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

  • 思路
    兔子的规律为:1,1,2,3,5,8,13,21……
    f(1) = 1(第1个月有一对兔子)
    f(2) = 1(第2个月还是一对兔子)
    f(3) = 2(原来有一对兔子,第3个月开始,每个月生一对兔子)
    f(4) = 3(原来有两对兔子,有一对可以生育)
    f(5) = 5(原来有三对兔子,第3个月出生的那对兔子也可以生育了,那么现在有两对兔子可以生育)
    f(6) = 8(原来有五对兔子,第4个月出生的那对兔子也可以生育了,那么现在有三对兔子可以生育)
    ……
    由以上可以看出,第n个月f(n) = f(n - 1) + f(n - 2)对兔子。
    f(n-1)是上个月的兔子数量,是原来有的。
    f(n-2)是可以生育的兔子数量,即多出来的数量。第n-2个月开始后的第3个月是第n个月,此时第n-2个月时的兔子都可以生育了。
  • 代码
public static int function(int i) {
    if (i == 1 || i == 2) {
        return 1;
    }

    return function(i - 1) + function(i - 2);
}
  1. 逆推的例子

这个一个关于存钱的问题,一位富翁给他儿子的四年大学生活存了一笔钱,富二代每月只能取3000作为下个月的生活费,采用的是整存零取的方式,年利率为1.71%,请问富翁需要一次性存入多少钱。

  • 思路
    这个题目是我们知道了结果,需要逆推条件, 第48月富二代要连本带利的取走最后3000,那么:
    第48个月月初本金 = (第47个月初本金 - 3000) * (1+ 0.0171 / 12)
    第47个月月初本金 = (第46个月初本金 - 3000) * (1+ 0.0171 / 12)
    第46个月月初本金 = (第45个月初本金 - 3000) * (1+ 0.0171 / 12)
    第45个月月初本金 = (第44个月初本金 - 3000) * (1+ 0.0171 / 12)
    第44个月月初本金 = (第43个月初本金 - 3000) * (1+ 0.0171 / 12)
    ……
    第2个月月初本金 = (第1个月初本金 - 3000) * (1+ 0.0171 / 12)
  • 代码
public static double function(int i) {
    if (i == 48) {
        return 3000;
    }

    return function(i + 1) / (1 + 0.0171 / 12) + 3000;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容