C语言斐波拉契数列
一、输出斐波那契数列
#include<stdio.h>int main()//主函数,程序的入口 {long long f1=1,f2=1,f3;//定义变量,并初始化,因为数很大,用long longint 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)表格如下:
这个数列有个明显的特点,即从第三个数开始,当前项数是前面相邻两项的和。
递推过程如下:
F0=1 F1=1 F2=F0+F1 F3=F1+F2 … Fn=F(n-2)+F(n-1)
源代码:
#include<stdio.h>#define NUM 13int 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的值。