Как я могу реализовать два напоминания в одной функции?

Я хочу решить проблему с помощью рекурсивной функции, используя два словаря для запоминания, но я не уверен, как реализовать эту идею.

Из того, что я узнал, при использовании всего лишь одного словаря напоминаний структура кода выглядит аналогично. Например, чтобы решить число Фибоначчи:

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)
Другие вопросы по тегам