赞
踩
斐波那契数列(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
题目:求出斐波那契数列中的第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; }
斐波那契数列是c++一个较为简单的数列,只要掌握数列规律,即可用多种做法求出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。