Вчерашняя задача с виду простая, но рекурсия в ней может доставить неприятностей. Задачу решило 55% человек из 42-х проголосовавших.
Код задачи:
def recursive_sum(lst):
if not lst:
return 0
return lst[0] + recursive_sum(lst[1:])
numbers = [1, 2, 3, 4, 5]
print(recursive_sum(numbers))
Разбор задачи Создаём переменную numbers со списком чисел. При помощи print() выводим вызов функции recursive_sum, передав в неё список чисел.
Объявляем функцию recursive_sum, принимающую аргумент lst. Внутри функции, в блоке if проверяем, если переданный список пуст, то возвращаем 0. В противном случае возвращаем сложение первого (нулевого) элемента списка и вызов этой же функции с новым списком в аргументах.
Правильный ответ: 15.
Процесс рекурсии. Главная проблема рекурсии (не считая расходы на ресурсы) в том, что она не очевидна с первого взгляда и порой трудно поддаётся мысленной интерпретации.
Рассмотрим процесс выполнения recursive_sum: 1. Первый вызов функции: lst = [1, 2, 3 , 4, 5], возвращается lst[0] = 1. 2. Второй вызов функции: lst = [2, 3 , 4, 5], возвращается lst[0] = 2. 3. Третий вызов функции: lst = [3 , 4, 5], возвращается lst[0] = 3. 4. Четвёртый вызов функции: lst = [4, 5], возвращается lst[0] = 4. 5. Пятый вызов функции: lst = [5], возвращается lst[0] = 5. 6. Шестой вызов функции: lst = [], возвращается 0.
После того, как рекурсия дошла до конца, она начинает возвращать результаты сложения в обратном порядке: 1. 5 + 0 = 5, возвращается 5 2. 4 + 5 = 9, возвращается 9 3. 3 + 9 = 12, возвращается 12 4. 2 + 12 = 14, возвращается 14 5. 1 + 14 = 15, возвращается 15
Таким образом получаем ответ - 15
· 11.08.2024
Я неправильно решил, потому что я мысленно ошибся - почему-то я решил, что возвращается тоже список, а возвращается-то число, сумма :/
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён