我希望使用两个memoization词典来解决递归函数的问题,但我不知道如何执行这个想法。
据我所知,当只使用一个memoization dicionary时,代码结构看起来很相似。例如,要解决Fibonacci数:
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]
我应该在代码中添加两个memoization dicitionaries?我应该在def
行和递归调用中添加什么内容?
我的问题:
list = [(16, 1, 4), (17, 2, 9), (3, 17, 10)]
list [i][0]
是值。考虑到两个限制因素,我应该得到最大可能的组合值:list[i][1]
和list[i][2]
。
答案 0 :(得分:0)
我无法理解你为什么要使用两个不同的词典,但我会使用装饰器
from functools import wraps
def memoize_two_dict(func):
dict1 = {}
dict2 = {}
@wraps(func)
def wrapper(*args, use_dict1=True):
targs = tuple(args)
if use_dict1:
if targs not in dict1:
dict1[targs] = func(*args)
return dict1[targs]
else:
if targs not in dict2:
dict2[targs] = func(*args)
return dict2[targs]
return wrapper
@memoize_two_dict
def myfunction(args):
...
# Uses the two different dictionaries
myfunction(1, use_dict1=False)
myfunction(1)