走台阶问题的动态规划

题目要求:有一座高度为10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法?
比如,每次走1级台阶,一共走10步,这是其中一种走法,我们可以简写成1,1,1,1,1, 1,1,1,1,1。、
  这是一道典型的动态规划类题目。我们很容易想到,当站在第10个台阶时,会回想刚才最后一步是咋上来的,无外乎两种方式:一种是在第9个台阶上,然后轻松一步到第10个台阶;一种是在第8个台阶上,直接跨了两个台阶,一步到第10个台阶。
  然后继续想要知道如何上到第9个或者第8个台阶呢?还是和前面思路一样,分成一次走1步和一次走2步。。。就这样层层递归,直到走到第1层和第0层台阶为止。所以:
number(走到第10个台阶)= number(走到第9个台阶) + number(走到第8个台阶)

对于这个公式,有一个很自然的想法,走的方法重复了?????
其实,并没有,尽管走到第9个台阶的方法中,确实包含有走到第8个台阶的方法,但是由于登上第10阶的最后一步不一样,所以从整个过程来看,number(走到第9个台阶) 和 number(走到第8个台阶)还是不一样的。这也就是说,按照一次走几步类分类,可以把解集合无重叠、无混淆的分为两个子集。

下面是自顶向下的递归实现,维护了一个

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值