E-斐波那契數

1

#include<stdio.h>
long long int abc[100]= {0,1,2,3,5};
int sum=0,pos=4;//No.1

long long int fun();
long long int fun(int n)
{
    sum++;
    long long int x=0,y=0;
    int k;
    if (n<=pos) return abc[n];
    else
    {
        abc[n]=fun(n-1)+fun(n-2);
        return abc[n];
    }
}
int main()
{
    int a,i,j;
    int n;
    scanf("%d",&a);

    while(a--)
    {
        scanf("%d",&n);
        printf("times=%d;fun(n)=%lld\n",sum,fun(n));
    }
}

2

#include<stdio.h>
int sum=0;
    long long int fun();
long long int fun(int n){
// F(2n+1)=F(n+1)*F(n+1)+F(n)*F(n)
// F(2n)=F(n+1)*F(n)+F(n)*F(n-1)=F(n+1)*F(n)+F(n)*(F(n+1)-F(n))

    sum++;
    long long int x=0,y=0;
    int k;
    if(n==1||n==2) return 1;
    else if(n==3) return 2;
    else if(n==4) return 3;
    else {
        k=n/2;y=fun(k);
        x=fun(k+1);
        printf("k==%d,x==%lld,y===%lld\n",k,x,y);
        if(n%2!=0) return x*x + y*y;
        else return (2*x-y)*y;
    }
}
int main()
{
    int a;
    int n;

    scanf("%d",&a);
    while(a--){
    scanf("%d",&n);
    printf("times=%d;fun(n)=%lld\n",sum,fun(n));
    }
}

3

#include<stdio.h>
int main()
{

    int i,j,a,n;
    long long int f1=1,f2=1,t;
    while(a--)
    {
        f1=1;
        f2=1;
        scanf("%d",&n);
        for(i=3; i<=n; i++)
        {
            t=f2+f1;
            f1=f2;
            f2=t;
        }
        printf("fun(n)=%lld\n",f2);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章