在这个寻找爬楼梯的方法的问题中使用的递归函数是什么?



问题陈述

假设有一个楼梯,您可以通过 1 步、2 步或 3 步爬上。如果楼梯有 n 个台阶,您可以通过多少种可能的方式爬楼梯?编写一个递归函数来解决问题。

例:

n == 1 则答案 = 1

n == 3 则答案 = 4 ,
输出为 4,因为我们有四种方式 可以爬楼梯:

1 步 + 1 步 + 1 步 1 步 + 2 步2 步 + 1 步 3 步



n == 5 则答案 = 13

溶液

def staircase(n):
if n <= 0:
return 1
if n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 4
return staircase(n - 1) + staircase(n - 2) + staircase(n - 3)

我了解递归如何工作的基础知识。

我认为递归是一种解决问题的方法,首先解决其较小的部分,然后组合结果以获得最终答案。我们为最小的零件设置一个基本条件,然后从那里开始构建我们的解决方案。

从这个意义上说,我理解了阶乘、回文、斐波那契和河内塔的著名递归问题,很明显,较小的部分构成了较大的部分,递归优雅地解决了这个问题。

但是对于楼梯问题,我根本无法理解作者是如何提出这个解决方案的以及为什么它有效?

我正在寻求更多关于理解和此解决方案背后的思考过程的帮助,而不是程序本身,因为我已经查看了堆栈跟踪并对它的执行有一个公平的想法。

编辑 - 楼梯上的递归

对于那些感兴趣的人,链接的帖子对同一问题有更深入的解释

要爬 n>3 级楼梯,要么先爬 1 个楼梯,然后爬 n-1 个楼梯,[b] 先爬 2 个楼梯,然后爬 n-2 个楼梯,或者 [c] 先爬 3 个楼梯,然后再爬 n-3 个楼梯。计算方式,它是 S(n( = S(n-1( + S(n-2( + S(n-3(

最新更新