斐波那契数列

Posted Jack Chao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斐波那契数列相关的知识,希望对你有一定的参考价值。

斐波那契数列

最近在想斐波那契数列的方法。因为在网上接触过递归的思想,所以有了第一个代码。

#include<stdio.h>
int f(int i )

	if(i <= 2)
	
		return 1;
	
	else
	
		return f(i - 1) + f(i - 2);
	

int main()

	int n = 0;
	scanf("%d" , &n);
	int i = 0;
	for(i = 1;i<=n;i++)
	
		printf("%d " , f(i));
	
	return 0;
 

这边的递归思想,大家可以在自定义函数当中看到。
之后我想到,能不能用循环的思想去解决这个问题。
所以有了第二个版本的代码。

#include<stdio.h>
int main()

	int i = 0;
	int a = 0;
	int m = 1;
	int n = 1;
	int sum = 0;
	int b = 0;
	scanf("%d" , &a);
	for(i= 0;i<2;i++)
	
		printf("%d " , m);
	
	for(i = 2;i<a;i++)
	
		sum = n + m;
		printf("%d " , sum);
		m = m + n;
		n = m - n;
		m = m - n;
		m = sum;
	
	return 0;
 

在这个代码中我们可以看到一个问题,那就是当我们输入1 的时候,我们可以发现,我们输出的是两个数字。
所以有了第三个版本。

#include<stdio.h>
int main()

	int i = 0;
	int a = 0;
	int m = 1;
	int n = 1;
	int sum = 0;
	int b = 0;
	scanf("%d" , &a);
	for(i = 1;i <=a;i++)
	
		printf("%d " , m);
		b++;
		if(b == 2)
		
			break;
		
	
	for(i = 2;i<a;i++)
	
		sum = n + m;
		printf("%d " , sum);
		m = m + n;
		n = m - n;
		m = m - n;
		m = sum;
	
	return 0;

这个版本解决了第二个版本所带来的问题。但它太过繁琐。我觉得这不是最完美的一个。所以有了第四个版本。

#include<stdio.h>
int main()

	int a = 1;
	int b = 1;
	int c = 0;
	int n = 0;
	int i = 0;
	scanf("%d" , &n);
	for(i = 0;i< n;i++)
	
		printf("%d " , a);
		a = b + c;
		c = b;
		b = a;
	
	return 0;

这个版本很简单。但我觉得,解决斐波那契数列还会有更简单,更创新的版本。
最后感谢大家的阅读。

以上是关于斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章

介绍下斐波那契数列。

试编一程序,输出斐波那契数列中的前10项。(斐波那契数列指的是这样一个数列:1

递归求斐波那契数列

递归优化的斐波那契数列

斐波那契数列求和公式

斐波那契数列