【发布时间】:2015-09-05 12:09:05
【问题描述】:
我希望使用两个记忆字典来解决递归函数的问题,但我不确定如何执行这个想法。
据我所知,当只使用一个记忆字典时,代码结构看起来很相似。例如求解斐波那契数:
def fib_mem(n,mem=None):
if n < 2:
return n
if mem == None:
mem = {}
if n not in mem:
mem[n] = fib_mem(n-1,mem) + fib_mem(n-2,mem)
return mem[n]
我应该在代码中添加什么来使用两个记忆字典?我应该在def 行和递归调用中添加什么?
我的问题:
list = [(16, 1, 4), (17, 2, 9), (3, 17, 10)]
其中list [i][0] 是值。考虑到给定的两个限制因素,我应该得到最大可能的组合值:list[i][1] 和 list[i][2]。
【问题讨论】:
-
为什么要两个字典?
-
你认为第二个 dict 会有什么改进?
-
请注意,实现记忆的常规方法是使用 装饰器,您应该通过 identity -
if mem is None测试None。 -
感谢您这么快回复。在我的问题中,我得到了两个限制因素,我尝试将它们分成 2 个不同的问题,并使用 minimum 函数获取其中一个返回值。
-
如果您提供了一个实际问题的示例,然后显示minimal example您当前的代码并描述其中的问题,这可能会有所帮助。
标签: python python-2.7 python-3.x memoization