Как оптимизировать функцию рекурсивного вызова с помощью функции фабрики кэширования в программах python - PullRequest
0 голосов
/ 08 апреля 2020

Мне было интересно, можно ли оптимизировать рекурсивную функцию, которую я написал, для выполнения оператора плюс в последовательностях. Для этого я написал следующую рекурсивную функцию, которая не пытается использовать реализованный мною кешер:

def rec_sum(list_in, result = 0, reverse = False):
    try:
        head, *list_in =list_in

        if reverse: result1 = head + result
        else:       result1 = result + head

        if list_in:
            return rec_sum(list_in, result1, reverse)
        if not list_in:
            return result1
    except:
        return result1

Я реализовал кешер, который использует фабричную функцию и содержит только один словарь. :

def cache():
    dic = dict()
    def inner(x,y):
        d[x] = y
        return d
    return inner

Моя основная идея состоит в том, чтобы сделать рекурсивную функцию rec_sum для использования кеша, поэтому при ее вызове ей не нужно достигать дна стека для возврата значения, потому что оно надо сначала поискать по словарю, я правда не знаю, возможно ли это, может я конфликтую с теорией рекурсии, но я пытаюсь. Поэтому я попытался реализовать эту концепцию в своей функции, и я не получаю то, что хочу, спасибо за чтение и помощь:

def memorec_sum(list_in, result = 0, reverse = False):
    try:
        cacher = cache()
        head, *list_in =list_in
        key = (head, result, reverse)

        if reverse: result1 = head + result
        else:       result1 = result + head

        dic = cacher(key, result)

        if key in dic:
            return dic[key]
        if list_in:
            return memorec_sum(list_in, result1, reverse)
        if not list_in:
            return result1
    except:
        return result1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...