C语言 斐波那契数列1、1、2、3、5、8、13、21、34、……

今天来介绍如何用C语言来输出斐波那契数列的前十项

#include "stdio.h"
int fib(int n){
    
    
	return n==1||n==2?n=1:fib(n-1)+fib(n-2);
}
void main(){
    
    
	for(int i=1;i<=10;i++)
		printf("%3d",fib(i));
}

让我们来了解一下斐波那契数列是什么东西?

波那契数列其实就是这样一组数列:1、1、2、3、5、8、13、21、34、……
那由我们观察一下:
第三项等于第一项与第二项的和,第四项是第三项与第二项的和,以此类推可以推到出来:n=(n-1)+(n-2) 就是第n项等于前两项的和。

解决这个问题显而易见,用数组方便理解,也容易实现。

分为三步:

  1. 赋值1
  2. 利用公式计算
  3. 输出

提示(手机用户左滑代码部分查看注释)

#include "stdio.h"
void main(){
    
    
	int a[10]={
    
    1,1};			//对数组的前两项赋值为1
	for(int i=2 ; i<10 ; i++)	//利用我们得到的公式进行赋值
		a[i]=a[i-1]+a[i-2];

	for(int j=0 ; j<10 ;j++)	//输出
		printf("%3d",a[j]);

	printf("\n");
}

显而易见这种方法更容易让同学们理解;那我们有没有其他方法实现呢?

答案是肯定有!

利用递归实现对斐波那契数列的输出

那利用递归怎么解决这个问题呢?

因为我们输出前10项,所以我们在主函数里做十次循环,然后输出时调用fib函数。
fib对主函数传递过来的参数进行一个判断做出一个相应的操作

#include "stdio.h"
int fib(int n){
    
    
	if(n==1||n==2)				//
		n=1;
	else
		n=fib(n-1)+fib(n-2);

	return n;
}
void main(){
    
    
	for(int i=1;i<=10;i++)
		printf("%3d",fib(i));

	printf("\n");
}

1.首先第一次循环i=1传递参数给到fib里的n,那此时在fib函数里n=1;
接着对n值判断,如果等于1或者等于2,那么将1赋给n,否则进行递归调用
当然这里n=1,是满足条件的,将1的值重新赋给n;
最后返回n值,也就是第一个返回的值是1

2.那么第二次循环i值为2传递给fib函数里面的n,此时n=2;
条件是:n等于1或者n等于2,那么将1赋值给n,否则就进行递归调用
当然了!这里n=2,也是满足条件的,将1的值重新赋给n;
最后返回值,也就是第二个返回的值是1

这样我们数列的前两项就已经完成输出了。

3.当我们做到第三次循环时,i不满足条件,进行n=fib(n-1)+fib(n-2);的操作

(1)那首先是先对fib(n-1)下手的,那也就是fib(3-1),小学上过的都应该知道3-1等于2,那既然等于2了是不是满足条件了,所以fib(n-1)等于1。

(2)接着对fib(n-2)下手,那这里n等于3,3-2等于1,欸?是不是也满足条件,所以呢?fib(n-2)也为1

(3)经过前两部的运算现在可以写成n=1+1,显而易见n=2,返回值。接下来以此类推…

好了让我们看一下运行结果

在这里插入图片描述
ok这里是完全没有问题的;但是同学们知道啊。这个东西其实还可以化简得,至于如何化简,请看文章开头,至于为何这样?你要问我,我就只能说想引起你的注意。

猜你喜欢

转载自blog.csdn.net/weixin_52278438/article/details/111937393
今日推荐