题目
古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
思路
兔子的规律为数列 1,1,2,3,5,8,13,21… 符合斐波那契数列的变化规则,可以使用循环或者递归解这一题。
题解
① 循环
#include <stdio.h>
int main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld %12ld",f1,f2);
if(i%2==0)
{
printf("\n"); //控制输出,每行四个
}
f1=f1+f2; //前两个月加起来赋值给第三个月
f2=f1+f2; //前两个月加起来赋值给第三个月
}
}
② 递归
#include <stdio.h>
long countRabbit(long f)
{
if(f==1 || f==2)
{
return 1;
}
else
{
return countRabbit(f-1) + countRabbit(f-2);
}
}
int main()
{
int month ;
int i;
printf("请输入月份:");
scanf("%d",&month);
for(i=1;i<=month;i++)
{
long f = countRabbit(i);
printf("%12ld",f);
if(i%4==0)
{
printf("\n");
}
}
return 0;
}