[英]How to return an incremented variable to next recursion call on the recursion stack?
因此,我正在回答一個問題,其中給了我們一段需要爬的樓梯和一些target height
。 我們被告知每一步可以采取的maximum number of steps
步數。 我們被要求使用recursion
返回我們可以達到這個目標高度的方法數量。
假設target height is 3
, max 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.