所以我正在回答一個問題,其中給了我們一段需要爬的樓梯和一些樓梯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到下一個遞回呼叫在遞回堆疊上!
目前我正在回傳numberOfWays 1- 但我認為這是不正確的。我也試過incrementing numberOfWays by 1,然后簡單地跳出for loop,然后returning nothing進入遞回堆疊中的下一個遞回呼叫,但這似乎也不起作用。
此外,如果我能得到關于我的整體遞回解決方案的設定的反饋,那將會很棒,因為我對這些想法很陌生,盡管我確實對它的理解非常全面。
uj5u.com熱心網友回復:
我認為您可以執行以下操作。在這里,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
uj5u.com熱心網友回復:
這是您的答案的一個簡單解決方案,而不是添加新引數“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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/356406.html
上一篇:遞回二叉樹中計數節點的時間復雜度是否比o(n)多一點?
下一篇:串列拆分的python組合
