Хочу понять как работает рекурсивные функции на примере этого кода? Python
мой вопрос заклучаеться в том, как считать каждый последующий k+tri_recursion(k-1) ? Когда пытаюсь зайти в этот код и считать каждый цикл просто заблуждаюсь, опытные люди скажите пжл как вы считаете эту рекурсивную функцию. Спасибо
def tri_recursion(k):
if(k>0):
result = k+tri_recursion(k-1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)
Ответы (1 шт):
это сумма арифметической прогрессии до k с шагом 1
т.е. функция вычисляет 6 + 5 + 4 + ... + 1
как работает функция -
функция складывает значение аргумента со значением функции, чей аргумент на 1 меньше
функция при аргументе 0 возвращает 0, а не вызывает очередную функцию, поэтому на 0 рекурсия остановится
рекурсию можно представить так:
F(6) =
6 + F(5) =
6 + 5 + F(4) =
6 + 5 + 4 + F(3) =
....
6 + 5 + 4 + 3 + 2 + 1 + F(0)
и как писал выше на F(0) рекурсия обрывается
это кстати частая ошибка - забыть условие обрыва рекурсии, каждый вызов функции - это запись в стек, поэтому если рекурсия не разрывается, то стек переполняется и возникает ошибка
P.S.
кстати данную функцию можно было бы записать в 1 строчку:
def func(k):
return (k + func(k - 1)) if (k > 0) else 0
или через лямбда-выражение:
func = lambda k: (k + func(k - 1)) if (k > 0) else 0