哪位大神能解释一下这个流程怎么走的,答案是怎么个顺序算出来的?用pythontutor看步骤看了两天都没看懂 10
deftracer(func):defwrapper(*args,**kwargs):result=func(*args,**kwargs)print('%s(%r,%r...
def tracer(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print('%s(%r,%r)->%r'%(func.__name__,args,kwargs,result))
return result
return wrapper
@tracer
def fibonacci(n):
if n in (0,1):
return n
return (fibonacci(n-1)+fibonacci(n-2))
fibonacci(3)
想明白了,自己给自己回答:
fibonacci(3)等于fibonacci(2)+fibonacci(1)
fibonacci(2)等于fibonacci(1)+fibonacci(0)
所以输出顺序是10213 展开
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print('%s(%r,%r)->%r'%(func.__name__,args,kwargs,result))
return result
return wrapper
@tracer
def fibonacci(n):
if n in (0,1):
return n
return (fibonacci(n-1)+fibonacci(n-2))
fibonacci(3)
想明白了,自己给自己回答:
fibonacci(3)等于fibonacci(2)+fibonacci(1)
fibonacci(2)等于fibonacci(1)+fibonacci(0)
所以输出顺序是10213 展开
1个回答
展开全部
fib(3)执行
——fib(3)调用fib(2)
————fib(2)执行
—————— fib(2)调用fib(1)
————————fib(1)执行
——————fib(1)回到fib(2).................输出1
——————fib(2)调用fib(0)
————————fib(0)执行
——————fib(0)返回fib(2).................输出0
————fib(2)返回fib(3)........................输出2
——fib(3)调用fib(1)
————fib(1)执行
——fib(1)返回fib(3)...............................输出1
fib(3)完成...............................................输出3
其中的每个fib都被tracer装饰过了
——fib(3)调用fib(2)
————fib(2)执行
—————— fib(2)调用fib(1)
————————fib(1)执行
——————fib(1)回到fib(2).................输出1
——————fib(2)调用fib(0)
————————fib(0)执行
——————fib(0)返回fib(2).................输出0
————fib(2)返回fib(3)........................输出2
——fib(3)调用fib(1)
————fib(1)执行
——fib(1)返回fib(3)...............................输出1
fib(3)完成...............................................输出3
其中的每个fib都被tracer装饰过了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询