1.递推(以20为例)
#include<iostream>
using namespace std;
int fib[25];
int main(){
fib[1]=1,fib[2]=1;
for(int i=3;i<=20;i++){
fib[i]=fib[i-1]+fib[i-2];
}
cout<<fib[20];
return 0;
}
2.递归:
#include<iostream>
using namespace std;
int count=0;
int fib(int x){
count++;
if(x==1 ||x ==2)return 1;
else return fib(x-1)+fib(x-2);
}
int main(){
cout<<fib(20)<<endl;;
cout<<"共调用了(次):"<<count;
return 0;
}
3.递归+记忆化
#include<iostream>
using namespace std;
int count=0;
int data[25];
int fib(int x){
count++;
if(data[x]!=0) return data[x];
if(x==1 ||x ==2){
data[x]=1;
return data[x];
}
data[x]=fib(x-1)+fib(x-2);
return data[x];
}
int main(){
cout<<fib(20)<<endl;;
cout<<"共调用了(次):"<<count;
return 0;
}