现在有这样的一个问题:
楼梯有n个台阶,上楼可以一步上1阶,也可以一步上2阶,一共有多少种上楼的方法?
假设一个有11级的台阶,一个人一次可以上一阶也可以上两阶,那这个人有多少种方式走完这11级台阶?
==下面的结果都是排列组合算出来的==
- 每次上一台阶,也就是1*11=11,共1中方案。
- 只有一次上两个台阶,也就是一共上十次台阶,在这十次中任选一次上两阶,这样做共10中方案。
- 有两次上两个台阶,一共上九次台阶,也就是在9次中任选两次上两阶,共36中方案
- 有三次上两个台阶,共56种方案。
- 有四次上两个台阶,共35种方案。
- 有五次上两个台阶,共6种方案。
所以共有144种方案
理论上分析:只有一个台阶的话,只有1种走法,2级台阶的话,可以一步一个台阶走,也可以一步2个台阶走,共有2种走法。
当台阶数大于等于3之后,可以这么分析:如果最后一步走一个台阶,那么就是n-1个台阶的走法的种类,如果最后一步走两个台阶,那么就是n-2个台阶的走法的种类,所以n个台阶的走法种类就是n-1个台阶和n-2个台阶的走法的总和。因此,这是一个递归函数。也是一个裴波那契函数。
C++版本的程序代码:
Python版本的:
这样写是有报错的,因为
在函数体内部两次对自身的调用的结构都是无类型的,不知道该怎么解决
这样写就是可以成功运行的
|
|
但是这样在shell中尝试也是没问题的:
下面是更加python风格的解决办法:
接下来如果有n级台阶,我们可以一次上n个台阶(n = 1,2,3,4…n),那怎么处理呢?