递归 - 楼梯问题 - 为什么我的代码不起作用?-蟒



问题:

在这个问题中,我们正在评估的场景如下:你站在楼梯底部,正前往顶部。一小步会向上爬一级,大步会向上走两级。你想数一下根据大步和小步的不同组合,爬上整个楼梯。例如,三级楼梯可以用三种不同的方式攀登:三小步,一小步后一大步,或者一大步然后是一个小的。编写一个递归方法waysToClimb,该方法采用一个表示楼梯数的非负整数值并打印每一种独特的方式攀登一个这样高的楼梯,一次走一两个楼梯。您的方法应该输出每种爬楼梯的方式都在自己的线上,使用1表示1级楼梯的小步幅,使用2表示1级的大步幅2个楼梯。例如,waysToClimb(3)的调用应该产生以下输出:

[1, 1, 1]
[1, 2]
[2, 1]

我的代码:

def waysToClimb(n,a=[]):
if n == 0:
print(a)
if n >= 1:
a.append(1)
waysToClimb(n-1,a)
if n >= 2:
a.append(2)
waysToClimb(n-2,a)

但例如,当我键入:时

print(waysToClimb(3,[]))

结果是[2, 1] [2, 1, 1, 2] [2, 1, 1, 2, 1, 1]。为什么我的代码不能正常工作?

编辑:我本应该改变";a";函数内的变量,而不是函数外的变量。我写了fct(n,a+[2])而不是.append(2),它起作用了。谢谢大家的帮助。

有些东西,嗯,不同复杂:

def ways2climb(n,sofar=[]):
return [sofar] if n==0 else (ways2climb(n-2,sofar+[2]) if n>=2 else []) + ways2climb(n-1,sofar+[1])

请参阅此链接

def way_to_climb(n, path=None, val=None):
path = [] if path is None else path
val = [] if val is None else val
if n==0:
val.append(path)
elif n==1:
new_path = path.copy()
new_path.append(1)
way_to_climb(n-1, new_path, val)

elif n>1:
new_path1 = path.copy()
new_path1.append(1)

way_to_climb(n-1, new_path1, val)

new_path2 = path.copy()
new_path2.append(2)

way_to_climb(n-2, new_path2, val)
return val

向下滚动提到的链接,你会发现我粘贴在这里的代码。

已经有人给出了,这将帮助你找出正确的答案。

相关内容

最新更新