#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\n",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\n",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\n",f[a]%1000);
    }
    return 0;
} 

おすすめ

転載: www.cnblogs.com/liuziwen0224/p/12000509.html