题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....,即下个月是上两个月之和(从第三个月开始)。
迭代法:
#include<stdio.h>
int main()
{
int f1=1,f2=1,i;
for(i=1;i<=20;i++) //输出20组
{
printf("%12d%12d",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f1+f2;
}
return 0;
}
结果输出:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155
另法:
一.数组运算:
#include <stdio.h>
int main()
{
int n[41], i; //定义
n[0] = 0; //赋值
n[1] = 1;
n[2] = 1;
for (i = 3; i < 41; i++)
{
n[i] = n[i - 1] + n[i - 2];
}
printf("month\tnumber\n"); //输出
for (i = 1; i < 41; i++)
{
printf("%d\t%d\n", i, n[i]);
}
}
二.递归法:
#include<stdio.h>
int fibonaci(int i)
{
if(i == 0)
return 0;
if(i == 1)
return 1;
return fibonaci(i-1) + fibonaci(i-2);
}
int main()
{
int i;
printf("month\tnumber\n");
for (i = 1; i < 41; i++)
{
printf("%d\t%d\n", i,fibonaci(i));
}
return 0;
}