Как работает эта рекурсия в пайтон?
def sum(list):
if list == []:
return 0
else:
return list[0] + sum(list[1:])
print(sum([1,2,3]))
пожалуй самый главный вопрос это - что делает двоеточие в вызове функции? + sum(list[1:])
там где 1:
Ответы (2 шт):
: в индексах списка называется - срез (slice).
Самый базовый пример:
a = [1, 2, 3]
a[i:j] - возвращает все элементы списка начиная с i, заканчивая j-1
Тогда a[0:2] - вернёт первый и второй элемент списка:
print(a[0:2]) -> [1, 2]
Так же есть сокращенная запись срезов (как и у вас в примере), мы можем не указывать либо начальный индекс i, либо конечный индекс j, и тогда автоматически будут браться элементы либо с начала (в случае пропуска i), либо с конца (в случае пропуска j)
Тогда вызов a[0:2] будет аналогичен вызову a[:2], а вызов a[0:3] аналогичен вызову a[0:], или просто a.
def sum(list):
...
return list[0] + sum(list[1:])
Дополню всё же, что по сути рекурсия тут сводится к такой формуле
сумма(список) = первый элемент списка + сумма(остальные элементы списка)
Ну и отдельно тут ещё обработан случай, когда в списке остался один элемент и тогда "остальные элементы списка" - это пустой список. Заодно то, как это тут сделано, нормально позволяет обработать случай, когда список изначально пустой.