斐波那契(fibonacci)数列

斐波那契(fibonacci)数列

upd:2024-7-12 修复2处代码bug

递归法

O ( 2 n ) O(2^n) O(2n)

int fib(int x){
    if(x==0) return 0;
    else if(x==1||x==2) return 1;
    else return fib(x-1)+fib(x-2);
}

记忆化, O ( n ) O(n) O(n)

extern long long dp[MAX];
long long fib(int n){
    if(n==1||n==2) dp[n]=1;
    if(!dp[n]) dp[n]=fib(n-1)+fib(n-2);
    return dp[n];
}

迭代法

  • dp数组法
extern long long dp[MAX];
long long fib(int n){
    for(int i=1;i<=n;i++)
        if(i==1||i==2) dp[i]=1;
    	else if(!dp[i]) dp[i]=dp[i-1]+dp[i-2];
    return dp[n];
}
  • 滚动变量法
long long fib(int n){
    if(n==1||n==2) return 1;
    long long a=1,b=1,ans;
    while(n-2){
        ans=a+b;
        a=b;
        b=ans;
        n--;
    }
    return ans;
}

long long fib(int n) {
    if (n==1||n==2) return 1;
    long long a=1,b=1,ans;
    for(long long i=3;i<=n;i++){
        ans=a+b;
        a=b;
        b=ans;
    }
    return ans;
}
posted @ 2024-01-15 20:10  椰萝Yerosius  阅读(10)  评论(0)    收藏  举报  来源