计算斐波那契数-c语言

计算斐波那契数-c语言

斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
-摘自百度

我们可以观察斐波那契数列,可以发一个规律,从第三项开始,当前项都是前两项之和 1、1、2、3、5…
了解规律之后,我们就好写多了,先判断是否是前两项,是,则直接输出1,不是,则将前两项加起来。

参考代码

#include
//递归求第n个斐波那契数
int main()
{
	int n;
	scanf("%d", &n);
	int n1, n2,n3;
	n1 = 1;
	n2 = 1;
	n3 = 0;
	if (n ==1 || n == 2)\\不能图麻烦,直接写成n<=2
	{
		printf("%d ", n1);
		return 0;
	}
	for (int i = 3; i <= n; i++)
	{
		n3 = n1 + n2;
		n1 = n2;
		n2 = n3;
		if (i == n)
		{
			printf("%d ", n3);
		}
	}
	
	return 0;
}

递归实现

int fib(int n)
{
	if (n ==1 || n == 2)
		return 1;
	
	return fib(n - 1) + fib(n - 2);
}

int main()
{
	int n;
	scanf("%d", &n);

	int ret = fib(n);
	printf("%d ", ret);

	return 0;
}

递归实现,我是想不出来,但是通过画流程图发现的确可以求出对应的斐波那契数。
可以这么理解吗,当n大于2时,说明他不是前两项,那么这项就可以通过前两项相加得到。一直递归到n等2或者等于1时,再相加。

你可能感兴趣的:(c语言学习笔记,c语言,算法,c++)