递归-楼梯问题-为什么我的代码不工作?- Python

e0bqpujr  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(115)

问题:
在这个问题中,我们要评估的场景如下:您正站在楼梯的底部,正向楼梯的顶部前进。一小步将爬上一个楼梯,一大步将爬上两个楼梯。您希望根据大步和小步的不同组合来计算爬上整个楼梯的方法数。例如,一个有三个台阶的楼梯可以用三种不同的方法爬上:三个小步,一个小步接着一个大步,或者一个大步接着一个小步。编写一个递归方法waysToClimb,该方法接受一个表示楼梯数量的非负整数值,并打印爬该高度楼梯的每个唯一路径,一次走一个或两个楼梯的步幅。您的方法应该在自己的行上输出爬楼梯的每个路径,使用1表示1级的小步幅,使用2表示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),它工作了。谢谢大家的帮助。

vvppvyoh

vvppvyoh1#

一些,嗯,* 不同 * 错综复杂的东西:

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

o2rvlv0m2#

refer to this link

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

向下滚动提到的链接,你会发现我粘贴在这里的代码。
已经有人给了,这将帮助你找出正确的答案。

相关问题