我如何用Decorator打印递归调用



我有一个基本的fib函数,我想创建一个Decorator来打印fib的调用

我想打印调用而不改变递归函数

例如:

for n = 5: # Thats the general idea
fib(5)
fib(4), fib(3)
fib(3), fib(2), fib(2), fib(1)
fib(2), fib(1), fib(1), fib(0), fib(1), fib(0), fib(0), fib(-1)
def print_call_params(function):
def rec(params):
if params:
print(f"{function.__name__}({params})")
function(params)
return rec

@print_call_params
def fib(n):
if n < 3: return 1
return fib(n-1) + fib(n-2)

最终目标是创建一个文件,在那里我可以看到由递归

创建的树

我认为问题是缺少return:

def print_call_params(function):
def rec(params):
if params:
print(f"{function.__name__}({params})")
return function(params) #<- need to return
return rec

同时,我认为if params:是多余的。

最新更新