C语言斐波拉契数列

发布时间 2023-11-29 00:39:41作者: 梦回dream

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的值。