题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。
求总共有多少总跳法,并分析算法的时间复杂度。
递归或递推解决
int Taijie(int n)
{
if(n==1 || n==2) return n;
int first = 1;
int second = 2;
int answer = 0;
for (int i =2; i<n;i++)
{
answer = first +second;
first = second;
second = answer;
}
return answer;
}
加大难度,如果每次可以走1步,或者2步,或者3步,并要求打印出每一种走法
int take[99];
int num = 0;
void Try(int i, int s)//i代表当前站在第i级台阶,s代表第s步
{
int j;
for (j=1;j<=3;++j) //第s步可以走j级台阶
{
if(i<j) continue;//剩下的台阶不足j步了
else
{
take[s] = j;
if(i==j)//第s步刚好下完台阶了,实现一种方案
{
num++;
for (int k=1;k<=s;++k)
{
cout<<take[s]<<" ";
}
cout<<endl;
}
else //i>j 还可以走
{
Try(i-j,s+1);
}
}
}
}