Рекурсивная функция что принимает список и возвращает индекс числа начинающий последовательность с минимальной суммой

Задача выглядит так: Напишите рекурсивную функцию, которая принимает список из 100 целых чисел, полученных случайным образом, и находит позицию, с которой начинается последовательность из 10 чисел, сумма которых минимальна

Программа выполняется долго и я не могу проверить, что она возвращает

Мой код:

a = [random.randint(1, 10) for i in range(100)]
print(*a)
def task5(lst:list,value1 = 0, value2 = 10):
    if len(lst) == 10:
        return sum(lst)
    if sum(lst[value1:value2]) > task5((lst[value1 + 1:])):
        return sum(lst[value1:value2])
    else:
        return task5((lst[value1 + 1::]))

print(task5(a))

Да, я еще не начал поиск индекса, но уже застрял(


Ответы (1 шт):

Автор решения: CrazyElf
    if sum(lst[value1:value2]) > task5((lst[value1 + 1:])):
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^ рекурсивный вызов
        return sum(lst[value1:value2])
    else:
        return task5((lst[value1 + 1::]))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^ такой же рекурсивный вызов

У вас с какого-то момента код входит в бесконечный цикл:

проверка с рекурсивным вызовом -> рекурсивный вызов -> 
проверка с рекурсивным вызовом -> рекурсивный вызов -> ...

Просто запомните вычисленные значения и не делайте ещё один рекурсивный вызов для возврата значения. Ну и искать надо минимум, а не максимум, то есть сравнение обратное:

    sum1 = sum(lst[value1:value2]) 
    sum2 = task5(lst[value1 + 1:])
    if sum1 < sum2:
        return sum1
    else:
        return sum2
→ Ссылка