Python 返回递归函数的递归次数

全局变量

def fib(n):
    global count 
    count += 1 

    return n if n <= 1 else fib(n-1) + fib(n-2)

count = 0
print(fib(5), count) # 5 15

函数设置属性

def fib(n):
    fib.count += 1 
    return n if n <= 1 else fib(n-1) + fib(n-2)

fib.count = 0 
print(fib(5), fib.count) # 5

类装饰器

class Counter(object) :
    def __init__(self, fun) :
        self._fun = fun
        self.counter = 0
    def __call__(self,*args, **kwargs) :
        self.counter += 1
        return self._fun(*args, **kwargs)

# 斐波那契数列
@Counter
def fib(n):
    return n if n <= 1 else fib(n-1) + fib(n-2)

print(fib(5)) # 5
print(fib.counter) # 15

# 汉诺塔问题
@Counter
def move(n, a, b, c):
    if n == 1:
        print(a, '-->', c)
    else:
        move(n-1, a, c, b)
        move(1, a, b, c)
        move(n-1, b, a, c)

move(3, 'A', 'B', 'C')
print(move.counter) # 10