C/C++中关于斐波那契数列(递归/非递归)的分享

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

        斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……这个数列从第三项开始,每一项都等于前两项之和。


一、斐波那契数列(非递归法求和)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//1、1、2、3、5、8、13、21、34、……这个数列从第三项开始,每一项都等于前两项之和。
int Fib(int n)
{
	//赋初始值
    int num1 = 1;
	int num2 = 1;
	int sum = 1;
    //n为要循环的此时(变量交换次数)
	while (n)
	{
		if (n<=2)
		{
			return sum;
		}
		else
		{
			sum = num1 + num2;
			num1 = num2;
			num2 = sum;
			n--;
		}
	}
	return sum;
}

int main()
{
	int n = 0;
	scanf("%d",&n);
	//非递归法
	printf("%d", Fib(n)); ;
	return 0;
}

图解:

二、斐波那契数列(递归法求和)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//1、1、2、3、5、8、13、21、34、……这个数列从第三项开始,每一项都等于前两项之和。

int Fib(int n)
{
	int sum = 1;
	if (n <= 2)
		return sum;
	else
		return Fib(n - 1) + Fib(n - 2);
}

int main()
{
	int n = 0;
	scanf("%d",&n);
	//递归法
	printf("%d", Fib(n)); ;
	return 0;
}

 图解:

     

 注:若要算的数据过大时,不要去用递归的方式,如:n=60是,Fib(60)=Fib(59)+Fib(58),然后Fib(59)=Fib(58)+Fib(57),等等需要大量时间去计算。

总结

本次分享了关于斐波那契数列的两种计算方法,注意若要计算的数据过大时,不推荐使用递归会导致算法效率大大降低。

猜你喜欢

转载自blog.csdn.net/m0_74058637/article/details/131896163