我似乎無法弄清楚我的代碼破壞了什麼。在遞歸代碼中斷功能中實現記憶
我寫,需要一個金字塔一個代碼:
[[1],
[2,3],
[4,5,6],
[7,8,9,10]]
從頭部開始(金字塔[0] [0])計算最大總和可能通過移動到或者低於項,或要實現下方和右邊的項遞歸
在這個例子中,輸出應爲20
這是一個沒有記憶化的代碼,其中正常工作:
def max_trail(pyramid,row=0,col=0):
if row == (len(pyramid)-1):
return pyramid[row][col]
else:
return pyramid[row][col] + max(max_trail(pyramid ,row+1 ,col),
max_trail(pyramid ,row+1, col+1))
但是,當我嘗試應用memoization,沿途的事情打破。 我錯過了什麼?
這是斷碼:
def max_trail_mem(pyramid,row=0,col=0,mem=None):
if mem==None:
mem={}
key = ((row),(col))
if row == (len(pyramid)-1):
if key not in mem:
value = pyramid[row][col]
mem[key]=value
return mem[key]
return mem[key]
else:
key = (row+1),(col)
if key not in mem:
mem[(row+1),(col)] = max_trail_mem(pyramid ,row+1 ,col,mem)
key = (row+1),(col+1)
if key not in mem:
mem[(row+1),(col+1)]=max_trail_mem(pyramid ,row+1, col+1,mem)
return max(mem[(row+1),(col)],mem[(row+1),(col+1)])
這已小時的休息我可憐studential生活。 任何幫助將不勝感激!
歡迎的StackOverflow!請花時間參加[旅遊](http://stackoverflow.com/tour),並參閱[我可以在這裏問什麼?](http://stackoverflow.com/help/on-topic)。正如它寫的,你的問題是要求調試幫助「爲什麼這個代碼不工作?」這在[我可以在這裏問什麼?](http://stackoverflow.com/help/on-topic)作爲stackoverflow的offtopic特別列出。 –
您是否嘗試過測試失敗的地方?您可以添加打印語句以進行快速測試或使用[pdb](https://docs.python.org/3.6/library/pdb.html)。 – Nister