Хочу понять как работает рекурсивные функции на примере этого кода? 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 шт):

Автор решения: Zhihar

это сумма арифметической прогрессии до 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
→ Ссылка