*/
递推求解
#include<iostream> using namespace std; long long data[42]; int main() { int n,m; cin>>n; data[1]=1; data[2]=1; for(int i=3;i<=40;i++) data[i]=data[i-1]+data[i-2]; for( int i=1;i<=n;i++) { cin>>m; cout<<data[m]<<endl; } return 0;}
递归求解:
#include<iostream> #include<cstring> using namespace std; long long data[42]; int lt(int n) { if(n==1||n==2) return 1; if(data[n]==0) data[n]=lt(n-1)+lt(n-2); return data[n]; } int main() { int n,m; memset(data,0,sizeof(data)); cin>>n; for( int i=1;i<=n;i++) { cin>>m; cout<<lt(m)<<endl; } return 0; }