哪位大神能解释一下这个流程怎么走的,答案是怎么个顺序算出来的?用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
展开
 我来答
捣蒜大师Edison
2018-04-17 · TA获得超过2963个赞
知道大有可为答主
回答量:3825
采纳率:77%
帮助的人:1344万
展开全部
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装饰过了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式