def recursive_sum(n, total=0):
if n == 0:
return total
return recursive_sum(n-1, total+n)
print(recursive_sum(3))
Функция recursive_sum(n, total=0)
рекурсивно вычисляет сумму чисел от 1 до n.
Базовый случай: если n == 0
, функция возвращает накопленную сумму total
.
Рекурсивный случай: функция вызывает сама себя с аргументами n-1
и total+n
, добавляя текущее значение n
к сумме.
Вызов print(recursive_sum(3))
вернет 6, так как 1 + 2 + 3 = 6.
Задача: Реализовать рекурсивную функцию, вычисляющую сумму чисел от 1 до n.
Решение:
def recursive_sum(n, total=0):
if n == 0:
return total
return recursive_sum(n-1, total+n)
print(recursive_sum(3))
Разбор решения:
recursive_sum(n, total=0)
принимает два аргумента:
n
: Целое число, определяющее верхнюю границу диапазона суммирования (от 1 до n).total
: Аккумулятор суммы. По умолчанию равен 0. Использование аккумулятора позволяет избежать переполнения стека вызовов для больших значений n.n
равно 0, функция возвращает текущее значение total
. Это условие завершает рекурсию.n
не равно 0, функция вызывает саму себя с аргументами n-1
и total+n
. Это добавляет текущее значение n
к аккумулятору total
и уменьшает n
на 1 для следующего рекурсивного вызова.recursive_sum(3)
recursive_sum(3, 0)
-> recursive_sum(2, 3)
recursive_sum(2, 3)
-> recursive_sum(1, 5)
recursive_sum(1, 5)
-> recursive_sum(0, 6)
recursive_sum(0, 6)
-> 6
print(recursive_sum(3))
выведет 6
(1 + 2 + 3).Дополнительно:
n
все равно может возникнуть ошибка переполнения стека. В таких случаях лучше использовать итеративный подход.