Рекурсивная функция что принимает список и возвращает индекс числа начинающий последовательность с минимальной суммой
Задача выглядит так: Напишите рекурсивную функцию, которая принимает список из 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