C语言求斐波那契数列的前20个数

本文介绍了如何使用C语言通过循环和数组两种方式实现斐波那契数列。循环方法直接计算并输出数列的前10项,而数组方法则能保存数列的前20项,方便按需获取特定位置的数值。两种方法的代码实现详细展示,并通过控制每行输出的数列项数实现了良好的视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:Visual Studio 2019

斐波那契数列:

又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为兔子数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

细心观察就会发现这个数列从第3项开始,每一项都等于前两项之和

用数学方式表示为:

Fn=F(n-1)+F(n-2)      n>=3

既然知道了这个规律那么这个问题就很简单了。


针对与这个问题

我们有两种方法可以解决:

  1. 循环
  2. 数组

循环:

#include<stdio.h>

int main() {
int f1 = 1, f2 = 1;
	for ( int i = 1; i <=10; i++ )
	{
		printf( "%12d %12d", f1, f2 );
        //当输出4个数后换行
		if (i%2==0 ) {
			printf( "\n" );
		}
        //计算下一个数的值,并存放到f1中
		f1 = f1 + f2;
        //计算下两个的值,并存放到f2中
		f2 = f2 + f1;
	}
	printf( "\n" );
	return 0;
}

 if语句的作用是使输出4个数后换行。

i是循环变量,当i为偶数时换行,由于每次循环要输出2个数(f1,f2)

因此i为偶数也就是已经输出了4个数,输出四个数之后实现换行。

效果:


数组:

在之前的循环解决这个问题中,我们定义了两个变量,程序可以顺序计算并输出各个数。

但不能在内存中保存这些数。假如用户不想要求整个数列,而只想要求数列中的某个值

数组就可以完美解决。

每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组元素中即可。

代码:

#include<stdio.h>

int main(){
    //等同于{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
	int f [ 20 ] = { 1,1 };
	for ( int i = 2; i < 20; i++ )
		//计算f[2]-f[19]的值
		f [ i ] = f [ i - 2 ] + f [ i - 1 ];
	for ( int i = 0; i < 20; i++ )
	{
		//控制每行输出4个数后换行
		if ( i%4==0 )
		{
			printf( "\n" );
		}
		printf( "%12d", f [ i ] );
	}
	printf( "\n" );
    return 0;
}

 因为斐波那契数列的特性,我们指定了f[0]和f[1]的值为1,剩余值为0

根据数组的特点,由前面两个元素的值可计算出第3个元素的值

f[2]=f[0]+f[1]

效果:


实际上这两个代码运行起来的效果是一样的

可能看各个的运行效果不太直观

两个方法:

#include<stdio.h>
int main() {
	//用数组来处理斐波那契数列问题
	//等同于{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
	int f [ 20 ] = { 1,1 };
	for ( int i = 2; i < 20; i++ )
		//计算f[2]-f[19]的值
		f [ i ] = f [ i - 2 ] + f [ i - 1 ];
	for ( int i = 0; i < 20; i++ )
	{
		//控制每行输出4个数后换行
		if ( i%4==0 )
		{
			printf( "\n" );
		}
		printf( "%12d", f [ i ] );
	}
	printf( "\n" );
	//用循环来处理斐波那契数列问题
	int f1 = 1, f2 = 1;
	for ( int i = 1; i <=10; i++ )
	{
		printf( "%12d %12d", f1, f2 );
		if (i%2==0 ) {
			printf( "\n" );
		}
		f1 = f1 + f2;
		f2 = f2 + f1;
	}
	printf( "\n" );
	

	return 0;
}

效果:

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhhhhauuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值