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