台阶问题1
问题描述:有17个台阶,规定一个人每步只能跨1步,2步或者3步,问一共有几种方法可以走完整个阶梯?
解法:运用递归的方法,假设已经到达了最后一步,即从17从发,依次往前递归。就像一棵树一样,开始是每一步都是1,函数返回后2个1合并为一个2,继续按照这种方法作返回,最终得到结果。但这种方法到33个台阶以上就会运算超时,我依然没有想到解决的方法,同时我也想用循环试试可不可行,但转换起来太复杂也没有实现。
#include <iostream>
using namespace std;
int fun(int allStep)
{
switch(allStep)
{
case 1:
return 1;
case 2:
return 2;
case 3:
return 4;
}
return fun(allStep - 1) + fun(allStep - 2) + fun(allStep - 3);
}
void main()
{
int allStep = 17;
int method = 0;
method = fun(allStep);
cout << method;
system("pause");
}