Вчерашняя задача с виду простая, но рекурсия в ней может доставить неприятностей. Задачу решило 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