我试图弄清楚如何修改下面的代码来帮助解决给出的问题。但是,我想做到这一点,而不是一次只能执行1或2步,所以我也可以采取3步。

您有N步梯(梯级)。您可以一次梯级或两步任意组合地爬上梯子。有多少条不同的路线(1步或2步的组合)组成阶梯?

这是我要修改的一些代码:

def countP(n):
    if (n == 1 or n == 2):
        return n

    return countP(n-1) + countP(n-2)


到目前为止,我已经尝试过了,但没有得到正确的答案:

def countP(n):
    if (n == 1 or n == 2 or n == 3):
        return n

    return countP(n-1) + countP(n-2) + countP(n-3)


指导的任何帮助将大有帮助!谢谢

最佳答案

您在n = 3递归中的基本情况是错误的。
对于n = 3,正确的答案应该是4,但是您将返回3
我建议您通过使用以下观察来简化基本情况:


最基本的情况是n <= 1,即当我们只有一个楼梯或没有楼梯时,因此,唯一的爬升方法是以1个单位或0个单位为单位。因此,方法的数量为countP(0) = 1countP(1) = 1
n > 1会发生什么?好吧,我们有三个选项可作为第一步-我们可以将m单位(1个单位,2个单位或3个单位的步骤)作为提供的m <= n第一步。
如果第一步可以采取1个单位的步长,则可以将子问题从countP(n)减少到countP(n-1)
如果第一步可以采用2个单位,则可以将子问题从countP(n)减少到countP(n-2)
如果我们可以将3个单元作为第一步,则可以将子问题从countP(n)减少到countP(n-3)
因此,我们最终的计数将是:所有countP(n - m)m <= n


代码如下:

def countP(n):
    if (n == 0 or n == 1):
        return 1

    count = 0
    for m in [1, 2, 3]:
        if m <= n:
            count += countP(n - m)

    return count

关于python - 如何修改这个斐波那契数列问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59074853/

10-10 04:13