假设第一个月有一对刚诞生的兔子,第二个月进入成熟期,第三个月开始生育兔子,而1对成熟的兔子,每月会生1对兔子,兔子永不死去......那么,由1对初生的兔子开始,12月后会有多少对兔子呢?(每次都一对,条件比较苛刻的)
这个关系,就这样写数,不太明显,不容易得到关系
第一个月,兔子1没有繁殖能力,所以1对。
第二个月,兔子1进入成熟期,任然是1对。
第三个月,兔子1生了一对兔子2,于是这个月共有2对兔子。
第四个月,兔子1又生了一对兔子3,兔子2进入成熟期,总共又3(2+1=3)对兔子。(本来的2对兔子+新生的1对兔子)
第五个月,兔子1又生了一对兔子4,兔子2生了兔子5,兔子3进入成熟期。总共有5对兔子。(本来的3对兔子(上个月的兔子数量)+新生的2对兔子(上上个月的兔子数量))
第六个月,兔子1生了一对兔子6,兔子2生了一对兔子7,兔子3生兔子8,兔子4,5进入成熟期。(5+3=8)
将关系列清除之后,从第三个月之后,当月的兔子数=上月兔子书+本月生的小兔子数,而本月所生的小兔子数正好是上上个月的兔子数。
递推式写出来之后,基本上就实现了。
扫描二维码关注公众号,回复:
3001098 查看本文章
int fib(int n)
{
//int f[n + 1];
vector<int> f(n+1);//空间开辟,直接以数组形式操作
if (n < 1)
return -1;
f[1] = 1; f[2] = 1;
for (int i = 3; i <= n; i++)
f[i]=f[i-1]+f[i-2];
return f[n];
}