题目:爬楼梯一次只能爬1级或者2级,问从第1级台阶到第m级台阶有多少种爬法?
思路1:排列法求解。数太大,爆long long,故错误。
思路2:采用递归思想
因为只有两种跨越(爬1级或者爬2级),故
到达第m级楼梯的爬法=到达第m-1级的爬法(到达第m-1级后选择爬1级的跨越方法,到达第m级)+到达m-2级的爬法(到达第m-2级后选择爬2级的跨越方法,到达第m级)
故本题是一道斐波那契题,附AC代码:
#include<iostream>
using namespace std;
int main()
{
int a[40];
a[0]=1,a[1]=1;
for(int i=2;i<40;i++)
{
a[i]=a[i-1]+a[i-2];
}
int n,m;
cin>>n;
while(n--)
{
cin>>m;
cout<<a[m-1]<<endl;
}
return 0;
}