一、递推

文章目录

  • 引例一、斐波那契数列
    • 问题描述:
    • 代码及分析
  • 引例二、该存多少钱
    • 问题描述
  • 总结

谈及递推,我第一印象是高中数学数列部分:有些通项公式就可以由递推公式表示,根据递推公式,我们用最暴力的方法–枚举,能算出数列第N项。
递推还可以细分为顺推和逆推。从已知条件出发,逐步递推,得出最终问题的输出就是顺推逆推则是已知了结果,通过迭代表达式推知初始条件。

引例一、斐波那契数列

问题描述:

一对兔子一个月生出一对兔子,而每对新出生的小兔子在它出生的第三个月,又能生出一对兔子,假设不发生死亡,由1对初生的兔子,N个月后共由多少对兔子?
详细可看百科:https://baike.baidu.com/item/斐波那契数列/99145?fr=aladdin
解题思路:
兔子可以划为两大类3小类:能繁衍的(出生3个月以上),不能繁衍的(1个月大,本月刚出生,2个月大的)

代码及分析

#include
#define NUM 24
int main()
{
int i;
long int fib[NUM]={1,1};
for(i=2;i<NUM;i++)
{
 fib[i]=fib[i-1]+fib[i-2];
}
for(i=0;i<NUM;i++)
{
 printf("%d月兔子-总数:%d\n",i, fib[i]);
}
return 0;
}

设立了大小为NUM的数组,置开始两个值为1,1,以后的每一项等于前两项之和。

引例二、该存多少钱

问题描述

小明上大学,家里打算每个月给他1000元,银行里月利率rate,问最少存多少能够4年。
本题隐含描述信息是保证第48个月的时候大于等于1000元,这样,根据利率,反推出前一个月至少有多少,依次反推,即能得出初始至少存多少钱。

总结

递推关系是一种比较好理解的关系,一步一步来,或者说它背后的变化规律是固定的,就能预测或者回溯。

你可能感兴趣的:(算法管窥,c算法,数据结构)