Как посчитать количество итерации рекурсивной функции?

def F(n):
    print('*')
    if n > 0:
        F(n-2)
        F(n // 2)
        F(n // 2)

F(5)

Нужно посчитать количество звездочек в функции, то есть количество проходов стека, как это сделать?


Ответы (2 шт):

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

Возможно слишком сложный способ - с декоратором, но позволяющий не трогать код функции

def countCalls(fun):
    def inner(*args):
        inner.calls += 1
        return fun(*args)
    inner.calls = 0
    return inner

@countCalls
def F(n):
    print('*')
    if n > 0:
        F(n-2)
        F(n // 2)
        F(n // 2)

F(5)
print(F.calls)  # 34
→ Ссылка
Автор решения: CrazyElf

Просто посчитать и сложить:

def F(n):
    print('*')
    c = 1
    if n > 0:
        c += F(n-2)
        c += F(n // 2)
        c += F(n // 2)
    return c

print(F(5))
# 34
→ Ссылка