#include<iostream>
#include<cstdio>
using namespace std;
#define MAXN 50
int dp(int i){
if(i==1) return 1;
if(i==2) return 2;
dp(i)=dp(i-1)+dp(i-2);
}
int main(){
int n;
n=scanf("%d",&n);
printf("%d",dp(n));
}
使用数组记忆重复结果,优化
<pre name="code" class="cpp">#include<iostream>
#include<cstdio>
using namespace std;
#define MAXN 50
int result[100]={0};
int dp(int i){
int res;
if(result[i]) return result[i];
if(i==0) return 1;
if(i==1) return 1;
res=dp(i-1)+dp(i-2);
result[i]=res;
return res;
}
int main(){
int n;
scanf("%d",&n);
printf("%d",dp(n));
}