簡體   English   中英

遞歸 - 樓梯問題 - 為什么我的代碼不起作用? - Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM