古典问题:有一对兔子...
/*古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
解若把兔子分成小兔子、中兔子和大兔子,不满1个月的为小兔子、满1个月不满2个月的为中兔子,满3个月以上的是老兔子,兔子对数按题目所说的方式增长如表 1所示。从表1最右边可看出:按月增长“兔子总对数”依次为1,1,2,3,5,8,13,...,这就是Fibnacci数列,它具有如下特点:第1和第2两项为1和1,从第3项开始每项是其前面两项之和.由此可得到该数列的迭代公式为:
*/
F1=1;
F2=1;
Fi=Fi-1 + Fi-2 (i>=3);
表1
月份 小兔子对数 中兔子对数 老兔子对数 兔子总对数
1 1 0 0 1
2 0 1 0 1
3 1 0 1 2
4 1 1 1 3
5 2 1 2 5
6 3 2 3 8
7 5 3 5 13
... ... ... ... ...
/*编写如下源程序求得Fibonacci数列得前40项.
*/
#include <stdio.h>
void main()
{
long f1 = 1, f2 = 1;
//定义long型变量f1和f2,最初作为数列的第一项和第二项,以后 作为数列的两个项
int i; //定义int型变量i作为for语句的循环变量
printf("按每月增长,兔子总对数组成的数列为: \n");
for(i=1;i<=20;i++)
{
printf("%8Ld %8Ld ", f1 ,f2);
//输出显示数列的两项f1和f2,每项占用域宽为8个字符,间 隔2个空格
if(i%4==0)
printf("\n");//变量i为4的整数倍时换行,每行显示8个数
f1 = f1 + f2;//从第3项开始,计算某项的值
f2 = f2 + f1;//计算某项紧跟项的值
}
printf( "\n");
}