B站上有这样一道题:
说的是求一个n级的阶梯,人每次一步只能上1~2级,问一共有几种走法?
这是Leetcode上的一道题,Up主的核心思路是使用路径搜索的递归算法,然后把每次的计算结果放在缓存里面。
如果从数学的角度分析一下,这其实是个组合问题。
我们把所有的步子作为一个集合S,这个问题就是从S里取出一步迈了2级(或1级)的情况的问题。假设迈一级的步子总数是k1,迈二级的步子总数是k2,则有
则步子总数t为
从t个步子里面取出k2个步子,作为一步2级的取法 ,剩下的步子都是一步1级,那么取法就是:
那么k2的范围怎么取呢?
k2不会超过n的一半,且可以存在全部是一步1级的情况;而且,由于每一个一步2级都可以拆分成两个一步1级,所以k2应该是连续的整数。即:
所以走法的总数就是
以n=5为例,走法总数