C/C++ 斐波那契(Fibonacci)的递归与非递归实现

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……。在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)。这个数列从第3项开始,每一项都等于前两项之和。

代码:
递归实现: 就是将n的前项都算出来,最终得到第n项。当n比较大时,时间复杂度会很高。

#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
 
const int maxn=1e5+10;
long long Fib[maxn];
 
long long Fibonacci(int x)
{
	if(Fib[x]!=0)
	return Fib[x];
	else
		return Fib[x]=Fibonacci(x-1)+Fibonacci(x-2);
}
 
int main()
{
	memset(Fib,0,sizeof(Fib));
	Fib[0]=1;Fib[1]=1;Fib[2]=1;Fib[3]=2;
	int x;
	printf("请输入你想要得知的第n项斐波那契数:(提示该数不得超过50)\n");
	scanf("%d",&x);
	printf("%d\n",Fibonacci(x));
	return 0;
}

非递归实现:

#include<stdio.h>
#include<string.h>
 
long long Fib[50];
 
int main()
{
	memset(Fib,0,sizeof(Fib));
	Fib[0]=1,Fib[1]=1,Fib[2]=1,Fib[3]=2;
	int x;
	printf("请输入一个不大于50的数,来获得这一项的斐波那契数:\n");
	scanf("%d",&x);
	for(int i=4;i<=x;i++)
		Fib[i]=Fib[i-1]+Fib[i-2];
	printf("%lld\n",Fib[x]);
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值