神奇的兔子

假设第一个月有一对刚诞生的兔子,第二个月进入成熟期,第三个月开始生育兔子,而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)

将关系列清除之后,从第三个月之后,当月的兔子数=上月兔子书+本月生的小兔子数,而本月所生的小兔子数正好是上上个月的兔子数。

递推式写出来之后,基本上就实现了。

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];
}



猜你喜欢

转载自blog.csdn.net/weixin_37703648/article/details/78622119