昆虫繁殖(继续理解递推和递归)
/*【题目描述】
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。
每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。
假设每个成虫不死,第一个月只有一对成虫,
且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?
0≤X≤20, 1≤Y≤20, X≤Z≤50。
【输入】
x, y, z的数值。
【输出】
过Z个月以后,共有成虫对数。
【输入样例】
1 2 8
【输出样例】
37
*/
/*
分析:
设a数组为每月的成虫数
b数组为每月的卵数
则可以写出下面的式子
a[i]=a[i-1]+b[i-2] //注意:是i-2
b[i]=y*a[i-x]
*/
方法一:递推
#include
using namespace std;
#include
int a[25], b[25];
void fun(int x,int y,int z)
{
a[1] = 1; b[1] = 0;
for (int i = 1; i <= x; i++)
{
a[i] = 1;
b[i] = 0;
}
for (int i = x + 1; i <= z+1; i++) //过了z个月,所以是z+1
{//递推式:
a[i] = a[i - 1] + b[i - 2];
b[i] = a[i - x] * y; //从卵变为成虫时间不计
}
cout << a[z+1];
}
int main()
{
int x, y, z;
cin >> x >> y >> z;
fun(x,y,z);
}
我们令x=3,y=2,应该是这样的: