C语言求斐波那契数列的前20个数
环境:Visual Studio 2019
斐波那契数列:
又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为兔子数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
细心观察就会发现这个数列从第3项开始,每一项都等于前两项之和
用数学方式表示为:
Fn=F(n-1)+F(n-2) n>=3
既然知道了这个规律那么这个问题就很简单了。
针对与这个问题
我们有两种方法可以解决:
- 循环
- 数组
循环:
#includeint 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个数,输出四个数之后实现换行。
效果:

数组:
在之前的循环解决这个问题中,我们定义了两个变量,程序可以顺序计算并输出各个数。
但不能在内存中保存这些数。假如用户不想要求整个数列,而只想要求数列中的某个值
数组就可以完美解决。
每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组元素中即可。
代码:
#includeint 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
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;
}
效果:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
