Как я могу реализовать два напоминания в одной функции?
Я хочу решить проблему с помощью рекурсивной функции, используя два словаря для запоминания, но я не уверен, как реализовать эту идею.
Из того, что я узнал, при использовании всего лишь одного словаря напоминаний структура кода выглядит аналогично. Например, чтобы решить число Фибоначчи:
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]
,
1 ответ
Я не могу понять, почему вы хотите использовать два разных словаря, но я бы использовал декоратор
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)