好的,所以这段代码来自我学校的练习题.我们要在心理上解析代码并检查答案.
当我第一次解析它时,我得到了4.我复制了代码并通过IDLE运行它得到8.我运行调试器并看到else:return循环if else语句x == 0,然后返回1.
我不明白返回1是如何出现在8.
def foo(x=5):
if x == 0:
return 1
else:
return 2*foo(x-1)
print(foo(3))
Run Code Online (Sandbox Code Playgroud)
据我所知,它正在调用foo(x-1)函数内部,foo(x=5)这使得它一次又一次地检查是否会再次x == 0返回1.返回1如何最终打印8?
Red*_*edX 18
您将对foo进行以下调用:
foo(3) -> foo(2) -> foo(1) -> foo(0)
Run Code Online (Sandbox Code Playgroud)
那些会回来的
foo(0) -> 1
foo(1) -> 2 * foo(0) -> 2 * 1 -> 2
foo(2) -> 2 * foo(1) -> 2 * 2 -> 4
foo(3) -> 2 * foo(2) -> 2 * 4 -> 8
Run Code Online (Sandbox Code Playgroud)
现在清楚了吗?
Kon*_*lph 11
我认为你有正确的想法(否则你不会得到答案4),你只是在心理锻炼中过早堕胎.
您可以在浏览代码时通过列表来跟踪变量:
foo(3)
foo(3 - 1)→foo(2)
foo(2 - 1)→foo(1)
foo(1 - 1)→foo(0)
12 * foo(1 - 1)→22 * foo(2 - 1)→42 * foo(3 - 1)→8