C语言斐波拉契数列
一、输出斐波那契数列
#include<stdio.h>
int main()//主函数,程序的入口
{
long long f1=1,f2=1,f3;//定义变量,并初始化,因为数很大,用long long
int row;
printf("输入需要输出的行数:");//提示语句
scanf("%d",&row);//输入行数
printf("%lld\n%lld\n",f1,f2);//先输出第一行和第二行
for(int i=1;i<row-1;i++)//循环控制row-2行
{
f3=f1+f2;//第三行的值是前面两行的和
printf("%lld\n",f3);
f1=f2;//变量赋值
f2=f3;
}
return 0;
}
二、应用实例
如果一对兔子每月能生一对小兔子,而每个小兔子在它出生后的第三个月里又能开始生一对小兔子,假定在不发生死亡的情况下,由一对出生的兔子开始,一年后能繁殖出多少对兔子?
解题思路:
(1)首先将兔子分为三种:大兔(能生小兔)、1个月大的小兔(当月生的)、2个月大的小兔(上月生的,不能生小兔),到第三个月时,2个月大的小兔就成大兔了。
(2)初始状态,只有一对1个月大的小兔。
(3)第一个月,一对2个月大的小兔。
(4)第二个月,2个月大的小兔长为大兔,生一对小兔,共两对。
(5)第三个月,大兔又生一对小兔,同时上月的小兔长为2个月的小兔,共三对。
(6)表格如下:
月份 | 大兔 | 1月大小兔 | 2月大小兔 | 总数 |
---|---|---|---|---|
初始 | 0 | 1 | 0 | 1 |
1月 | 0 | 0 | 1 | 1 |
2月 | 1 | 1 | 0 | 2 |
3月 | 1 | 1 | 1 | 3 |
4月 | 2 | 2 | 1 | 5 |
5月 | 3 | 3 | 2 | 8 |
6月 | 5 | 5 | 3 | 13 |
7月 | 8 | 8 | 5 | 21 |
这个数列有个明显的特点,即从第三个数开始,当前项数是前面相邻两项的和。
递推过程如下:
F0=1
F1=1
F2=F0+F1
F3=F1+F2
...
Fn=F(n-2)+F(n-1)
源代码:
#include<stdio.h>
#define NUM 13
int main()
{
int i;//定义整型变量i
long fib[NUM]={1,1};//定义一个数组,保存初始兔子数和每个月的总数
for(i=2;i<NUM;i++)//循环推算每个月兔子的总数
{
fib[i]=fib[i-2]+fib[i-1];
}
for(i=0;i<NUM;i++)//循环输出每个月的兔子总数
{
printf("%d月的兔子总数:%d\n",i,fib[i]);
}
return 0;
}
注: 若要输出更多项,修改第三行NUM的值。