[英]Recursion - Stairs Problem - Why doesn't my code work? - Python
問題:
在此問題中,我們正在評估的場景如下:您站在樓梯底部,正前往頂部。 小步將向上移動一個樓梯,大步前進兩個。 你想根據大步和小步的不同組合來計算爬整個樓梯的方法數。 例如,一個三級台階的樓梯可以用三種不同的方式爬上去:三小步,一小步后一大步,或一大步后一小步。 編寫一個遞歸方法waysToClimb
,它采用表示樓梯數量的非負值 integer 並打印爬上該高度樓梯的每種唯一方式,一次走一個或兩個樓梯。 你的方法應該是 output 沿着自己的路線爬樓梯,使用 1 表示小步幅 1 級樓梯,使用 2 表示大步幅 2 級樓梯。 例如,調用waysToClimb(3)
應產生以下 output:
[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]
。 為什么我的代碼不能正常工作?
編輯:我應該在 function 內而不是在它之外更改“a”變量。 我寫了 fct(n,a+[2]) 而不是 a.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
向下滾動提到的鏈接,您會找到我粘貼在這里的代碼。
已經由某人給出,這將幫助您找出正確答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.