最近在读杨峰老师的妙趣横生的算法;看到第3.8章中上楼梯问题,杨峰老师使用了回溯法得出最后的结果,我自己用递归函数写了个小程序,感觉思路挺顺的,就发表出来,本人是个刚出校门的大学生,有什么不对的希望各位指正。
先看看问题:
已知楼梯有20阶台阶,上楼可以一步上一步,也可以一步上两步,请编写一个程序,计算共有多少种不同的上楼方法。
以下是代码:
#include <stdio.h>
int nums(int high) { //high是楼梯的高度,num是不同上楼梯方法的种数
static int num = 0;
if (high > 0) {
nums(high - 1); //递归调用函数,从都是一步,慢慢到都是两步
nums(high - 2);
}
if (high == 0) { //楼梯高度正好是0时,就完成了一种下楼的方法。
num++;
}
return num;
}
int main() {
printf("%d", nums(20));
return 0;
}
杨峰老师给的答案是10946;
下面是这个小程序运行的结果:
这是一个老问题,成熟的想法有很多,我自己突然想出来有点小激动,就算记录一下自己的成长。谢谢大家。