Fibonacci数列(兔子繁殖)问题
求Fibonacci数列:1,1,2,3,5,8,13,… 的前40项。
本题来自于一个有趣的古典数学问题:有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。如果生下的所有兔子都能成活,且所有的兔子都不会因年龄大而老死,问每个月的兔子总数为多少?
分析:
① 此数列的规律是第1、2项都是1,从第3项开始,都是其前两项之和,并且有固定循环次数,因此可以用for循环实现。
② 这里用到的是什么算法呢?是迭代算法。迭代算法的基本思想是:不断地用新值取代变量的旧值,或由旧值递推出变量的新值。
程序如下:
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 5702887 9227465 14930352
24157817 39088169 63245986 102334155
请思考:如果使用数组,则程序如何编写?
本题来自于一个有趣的古典数学问题:有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。如果生下的所有兔子都能成活,且所有的兔子都不会因年龄大而老死,问每个月的兔子总数为多少?
分析:
① 此数列的规律是第1、2项都是1,从第3项开始,都是其前两项之和,并且有固定循环次数,因此可以用for循环实现。
② 这里用到的是什么算法呢?是迭代算法。迭代算法的基本思想是:不断地用新值取代变量的旧值,或由旧值递推出变量的新值。
程序如下:
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 5702887 9227465 14930352
24157817 39088169 63245986 102334155
请思考:如果使用数组,则程序如何编写?