例6.7求fibonacci数列40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:
f1=1 (n=1)
f2=1 (n=2)
fn=fn-1+fn-2 (n≥3)
这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?
解此题的算法如图6.13所示。
程序如下:
main()
{
long int f1,f2;
int i;
f1=1;f2=1;
for(i=1; i<=20; i++)
{
printf("%12ld %12ld ",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f2+f1;
}
}
运行结果为:
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 57022887 9227465 14930352
24157817 39088169 63245986 102334155
程序中在printf函数中输出格式符用“%12 ld”,而不是用“%12d”,这是由于在第23个数之后,整数值已超过整数最大值32767,因此必须用“%ld”格式输出。if语句的作用是使输出4个数后换行。i是循环变量,当i为偶数时换行,而i每增值1,就要计算和输出2个数(f1,f2),因此i每隔2换一次行相当于每输出4个数后换行输出。