用Python实现递归的教程

128 阅读2分钟

在本教程中,我们将了解一个非常有趣的问题,即梯子问题。让我们先了解一下在这个问题上我们想要达到什么目的。


了解梯子问题

在这个问题中,我们有两个输入,一个是台阶的数量,另一个是一个人在同一时间可以走的最大台阶数。

例如,如果最大台阶数=3。一个人在一个特定的时间内可以走1步,2步,或3步。

我们需要计算这个人每次走1步、2步或3步可以到达梯子顶端的所有方法。

递归解决方案 梯子问题1


梯子问题的解决方法

现在可以用普通的循环和if-else语句来解决这个问题。但更好的方法是遵循递归方法。如果你不知道递归是如何工作的,我建议你阅读下面提到的教程。

阅读更多关于递归的内容:Python中的递归

为了解决这个问题,我们将寻找最小的问题,即n=1到n=n的问题。让我们考虑最大的步骤数可以是3。

这种情况在下图中有所说明: 递归解决梯子问题

现在让我们来看看梯子问题的代码实现。


梯子问题在Python中的代码实现

这里我们要计算k个最大步骤的方法数。所以我们将按(n-1)、(n-2)、(n-3)等顺序计算数值,直到(n-k)。

最后,我们将把所有获得的数值相加,并返回最终的答案。下面给出了相同的代码实现:

def count_no_ways(n,k):

    if(n<0):
        return 0
    
    # already on top
    if(n==0):
        return 1

    if(n<3):
        return n

    ans = 0
    for i in range(1,k+1):
        ans+=count_no_ways(n-i,k)
    return ans

n = int(input())
k = int(input())

print(count_no_ways(n,k))

输出:

17  
17  
65536

我希望你清楚地了解梯子问题中使用的递归概念,并能够自己实现同样的问题。

谢谢你的阅读!学习愉快!😇