【发布时间】:2016-12-17 19:00:43
【问题描述】:
我似乎无法弄清楚是什么破坏了我的代码。
我写了一个带金字塔的代码:
[[1],
[2,3],
[4,5,6],
[7,8,9,10]]
从头部开始 (pyramid[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)])
这让我可怜的学生生活减少了好几个小时。 任何帮助将不胜感激!
【问题讨论】:
-
欢迎来到 StackOverflow!请花点时间拨打tour 并查看what can I ask here?。正如它所写的那样,您的问题是寻求调试帮助“为什么这段代码不起作用?”这在what can I ask here? 中特别概述为stackoverflow 的题外话。
-
您是否尝试过测试失败的地方?您可以添加打印语句以进行快速测试或使用pdb。
标签: python recursion memoization