#2019120700019-LG 斐波那契数列

Posted liuziwen0224

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#2019120700019-LG 斐波那契数列相关的知识,希望对你有一定的参考价值。

P1962 P3986等基础模板

1 递归(自调用)

//加入优化 
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
int fib[5005];
int f(int g){
    if(g==1||g==2) return 1;
    if(fib[g]!=-1) return fib[g];
    fib[g]=f(g-1)+f(g-2);
    return fib[g];
} 
int main( ){
    //memset(fib,-1,sizeof(fib));
    for(int i=1;i<=5005;i++) fib[i]=-1; 
    int a;
    int n;
    scanf("%d",&n);
    while(n--){
        scanf("%d",&a);
        printf("%d
",f(a));    
    }
    return 0;
} 

2 递推 (先读入后递归)

#include<cstdio>
#include <cstring>
using namespace std;
int main( ){
    int f[1000005];
    int n;
    scanf("%d",&n);
    while(n--){
        memset(f,0,sizeof(f));
        f[1]=1,f[2]=1;
        int a=0;
        scanf("%d",&a);
            for(int i=3;i<=a;i++){
            f[i]=f[i-1]%1000+f[i-2]%1000;
        }
        printf("%d
",f[a]%1000);
    }
    return 0;
} 

3 递推(先递归后读入)

#include<cstdio>
#include <cstring>
using namespace std;
    int f[1000005];//写在这里就能正常运行 
int main( ){
//int f[1000005] 如果写在main里面,那么会爆 
    int n;
    scanf("%d",&n);
    memset(f,0,sizeof(f));
    f[1]=1,f[2]=1;
        for(int i=3;i<=1000005;i++){
        f[i]=f[i-1]%1000+f[i-2]%1000;
}
    while(n--){
        int a=0;
        scanf("%d",&a);
        printf("%d
",f[a]%1000);
    }
    return 0;
} 

以上是关于#2019120700019-LG 斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章

斐波那契数列

介绍下斐波那契数列。

试编一程序,输出斐波那契数列中的前10项。(斐波那契数列指的是这样一个数列:1

递归求斐波那契数列

递归优化的斐波那契数列

斐波那契数列求和公式