簡體   English   中英

如何將遞增的變量返回到遞歸堆棧上的下一個遞歸調用?

[英]How to return an incremented variable to next recursion call on the recursion stack?

因此,我正在回答一個問題,其中給了我們一段需要爬的樓梯和一些target height 我們被告知每一步可以采取的maximum number of steps步數。 我們被要求使用recursion返回我們可以達到這個目標高度的方法數量。

假設target height is 3max steps is 2 那么解將是 3,因為我們可以采取以下步驟#1,1,1 #1,2#2,1來達到目標​​高度。

這是我的代碼如下:

def staircaseTraversal(height, maxSteps):
    numberOfWays = 0
    staircaseTraversalHelper(height, maxSteps, 0, 0)
    if numberOfWays:
        return numberOfWays
    return -1


def staircaseTraversalHelper(height, maxSteps, currentHeight, numberOfWays):
    for step in range(1, maxSteps+1):
        newHeight = currentHeight + step
        if newHeight == height:
            return numberOfWays + 1
        elif newHeight < height:
            staircaseTraversalHelper(height, maxSteps, newHeight, numberOfWays)

我的問題是關於當我們達到當前步驟 (newHeight) 等於目標高度的點時更新 numberOfWays,並且我們將 numberOfWays 增加 1,然后我努力將這個numberOfWays返回到下一個遞歸調用遞歸堆棧!

目前我正在做 return numberOfWays + 1 - 但我認為這是不正確的。 我還嘗試將incrementing numberOfWays by 1 ,然后簡單地退出for loop ,然后不returning nothing以進入遞歸堆棧中的下一個遞歸調用,但這似乎也不起作用。

此外,如果我能得到關於我的整體遞歸解決方案的設置的反饋,那就太好了,因為我對這些想法很陌生,盡管我確實非常全面地理解它。

這是您的答案的一個簡單解決方案,而不是添加新參數“currentHeight”,您可以這樣做

def staircaseTraversal(height, maxSteps):
    numbersOfWays = 0
    for step in range(1, maxSteps+1):
        if height == step:
            numbersOfWays +=1
            break
        elif height < step:
            break
        else:
            numbersOfWays += staircaseTraversal(height -step, maxSteps)
    return numbersOfWays
print(staircaseTraversal(3,2))

我認為您可以執行以下操作。 這里, height參數表示“剩余高度”,所以我減去遞歸調用的步驟。 請注意,您還可以使用sum來減少行數。

def staircaseTraversal(height, maxSteps):
    if height == 0:
        return 1
    if height < 0:
        return 0

    out = 0
    for step in range(1, min(height, maxSteps) + 1):
        out += staircaseTraversal(height - step, maxSteps)
    return out

staircaseTraversal(3, 2)
# 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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