看到一道题,大意是这样的:一次可以走一级或者走两级台阶,问50级台阶有多少种走法。
这种问题都是用到递归求解,找出前面几级走法的依赖关系,但注意的是用int保存结果会不会溢出,并且递归运行效率并不高,C++有个非常丑陋的语法叫模板元编程,通过牺牲编译时间提高递归运行效率。
1.用递归求出结果:
先分析前面几级台阶的走法:
用num(1)代表1级的方法数,下同。
//1级:1种方法 num(1)=1
//2级:2种 num(2)=2
//3级:1+1+1,1+2,2+1,3种 num(3)=3
//4级:1+1+1+1,1+1+2,1+2+1,2+1+1,2+2,5种 num(4)=5
//5级:1+1+1+1+1,1+1+1+2,1+1+2+1,1+2+1+1,2+1+1+1,2+2+1,1+2+2,2+1+2,8种 num(5)=8
可以通过比较得出:
num(3)=num(2)+num(1);
num(4)=num(3)+num(2);
num(5)=num(4)+num(3);
那么特例就是1级和2级台阶的方法数,也是退出递归的接口。
#inc