C语⾔求斐波那契数列的前20个数
c语言斐波那契数列
环境: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;
}
效果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。