斐波那契(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;
}

浙公网安备 33010602011771号