我试图弄清楚如何修改下面的代码来帮助解决给出的问题。但是,我想做到这一点,而不是一次只能执行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) = 1
和countP(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/