我工作的問題是這樣的,從破解編碼訪談:計數路徑
「一個孩子跑了n步樓梯,並且可以跳1步,2步, 或一次3個步驟。實施一種方法來計算孩子可以跑上樓梯的多少種可能的方式。「
來自C++我知道一個計數器可以作爲參考傳遞,但在Python中你不能。我也試圖追蹤導致成功的步驟順序。我在寫我的代碼是這樣的:
def __calculatePaths(currPathLength, paths, currSeries):
if currPathLength == 0:
print "successful series is", currSeries
return 1
elif currPathLength < 0: return 0
for i in range(1, 4):
newSeries = list(currSeries) # make new series to track steps
newSeries.append(i)
paths += __calculatePaths(currPathLength - i, paths, newSeries)
return paths
def calculatePaths(pathLength):
paths = __calculatePaths(pathLength, 0, [])
return paths
if __name__ == '__main__':
calculatePaths(3)
本次通話的輸出是:
successful series is [1, 1, 1]
successful series is [1, 2]
successful series is [2, 1]
successful series is [3]
6
我很困惑,因爲我的程序得到正確的路徑序列,但錯誤數量的路徑。我應該如何增加我的路徑?我知道如何在沒有全局變量的情況下做到這一點,但是如果不使用全局變量就無法解決這個問題。謝謝!
你可以使用數學,還是它必須是蠻力? –
蠻力解決方案對於其他遞歸問題是最普遍的(因爲我無法理解在遞歸問題中使用計數器的一般原理) – asp97
在Python中,如果您使計數器成爲容器(如列表)並將其作爲參數傳遞,您將通過引用有效地傳遞它。另外,如果您要編寫Python代碼,我強烈建議您遵循[PEP 8 - Python代碼樣式指南](https://www.python.org/dev/peps/pep-0008/)。 – martineau