爬楼梯问题,每次可以走1步或者2步,爬上n层楼梯的总方法,这题就是一个变相的fibonacci问题。
当n=1时,有1种方法,即直接走1步
当n=2时,有2方法:连续走2步,或直接走两步
对于n,设f(n)为总方法,则 f(n) = f(n-1)+f(n-2)
ps:f(n-1)即第一次走一步的走法,
f(n-2)即第一次走两步的走法
代码如下:
#include<iostream>
using namespace std;
int ClimbStairs(int n)
{
if(n<0)
return -1;
int res[] = {0,1};
if(n<2)
return res[n];
int f1 = 0,f2 = 1;
int result = 1;
for(int i=1;i<=n;i++)
{
result = f1+f2;
f1 = f2;
f2 = result;
}
return result;
}
int main()
{
int n;
cin>>n;
cout<<ClimbStairs(n)<<endl;
}