法一:递推算法
#include<iostream>
using namespace std;
int main(void){
int a[42];
a[2]=1;
a[3]=2;
for(int i=4;i<=41;i++){
a[i]=a[i-2]+a[i-1];//a[i]表示第i级楼梯的方案数
}
int n,m;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>m;
cout<<a[m]<<endl;
}
}
}
法二:递归算法(暴力递归,较容易超时)
#include<iostream>
using namespace std;
int f(int n){
if(n==1){
return 0;
}
else if(n==2){
return 1;
}
else if(n==3){
return 2;
}
else{
return f(n-1)+f(n-2);//f(n)表示第n级的方案数
}
}
int main(void){
int n,m;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>m;
cout<<f(m)<<endl;
}
}
}