c++实现斐波那契数列

1. 斐波那契数列介绍

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波那契数列都有直接的应用。

(文段引用来自百度百科,点击下方网站可了解更多)
https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/99145

2.c++实现斐波那契数列

题目:求出斐波那契数列中的第a个数对1000取模的值
输入:包括一个正整数a
输出:一个正整数
数字规模:1≤a≤1000000

1.替换法
思路:设定三个变量a,b,c,c1,a=1(斐波那契数列第一个数),b=1(斐波那契数列第二个数),a+b赋值给c,c赋值给c1,代表c;a再赋值给b,b再等于c
代码:

#include<iostream>
using namespace std;
int n,g;
int js(int x)
{
	if(x==1 || x==2)
		return 1;
	int i,a=1,b=1,c=2,c1;
	for(i=3;i<=g;i++)
	{
		
		c=a+b;
		c1=c;
		a=b;
		b=c1;
	}
	return c;
}
int main()
{
	
	scanf("%d",&n); 
	while(n--)	
	{
		scanf("%d",&g);
		printf("%d\n",js(g)%1000);
	}
	return 0;
}

PS:最简单的方法,注意代码的排列就可以
2.递推算法
通过递推公式js(x)=js(x-1)+js(x-2)直接得出
代码:

#include<iostream>
using namespace std;
int n;
int js(int x)
{
	if(x==1 || x==2)
		return 1;
	return js(x-1)+js(x-2);
}
int main()
{
	scanf("%d",&n); 
	printf("%d",js(n)%1000);
	return 0;
}

代码简略,但时间复杂度与空间复杂度较高
3.动态规划
做法与递归算法大致相同
代码:

#include<iostream>
using namespace std;
int b[1000001];
int n,a;
int js(int x)
{
	int i;
	b[1]=1;
	b[2]=1;
	for(i=3;i<=n;i++)
		b[i]=b[i-1]+b[i-2];
	return b[x];
}
int main()
{
	scanf("%d",&n);
	printf("%d\n",js(n)%1000);
	return 0;
}

3.总结

斐波那契数列是c++一个较为简单的数列,只要掌握数列规律,即可用多种做法求出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值