I need to create a decorator to call Ackermann function and write down its attributes: the number of recursions and execution time.
I tried the below code but it works wrong.
Could anyone help?
def visualise(func):
visualise.level = 0
@wraps (func)
def wrapper(*args, **kwargs):
start=time.perf_counter()
visualise.level += 1
calls = func(*args, **kwargs)
visualise.level -= 1
last_time_taken=time.perf_counter()-start
setattr(func,'calls',calls)
setattr(func,'last_time_taken',last_time_taken)
print(last_time_taken)
return calls
return wrapper
@visualise
def ackermann(n, m):
...
ackermann(2, 2)
ackermann.last_time_taken
ackermann.calls
The result should be ackermann.last_time_taken = 0.00000034 seconds (for example) and ackermann.calls = 7.