[英]Understanding the flow of execution of a recursive function with two self calls
我需要帮助了解这个 function 是如何工作的:
import turtle
annie = turtle.Turtle()
def draw(t, length, n):
if n == 0:
return
angle = 50
t.fd(length*n)
t.lt(angle)
draw(t, length, n-1)
t.rt(2*angle)
draw(t, length, n-1)
t.lt(angle)
t.bk(length*n)
draw(annie, 30, 4)
turtle.mainloop()
这个 function 创建了一个带有大 Y 形分支的对称分支图形,两个较小的 Y 形分支悬挂在较大 Y 形分支的每个 arm 的末端。 function 以“乌龟”(当它在屏幕上移动时留下一条线的小箭头)结束,从它绘制的最后一个较小分支的尖端向后退四次,并在它从较大分支的开头开始的地方结束分支。 那么,如果在该语句之前的自我调用从 n 的值中减去 1,那么在 function 完成时 n = 4 是如何实现的呢? 第一次自调用是否会遍历 function 的前几行,直到 n = 0,然后通过 ZC1C425268E68385D1AB5074C17A9F 的 rest? 在这种情况下,第二个自调用语句的第一个实例的 n 值是多少? 4? 0? 我想我显然误解了一些东西,并希望有任何资源来帮助我了解我在做什么。
当最外面的 function 完成时n
仍然是 4 的原因是每个 function 都有自己的n
副本。 每个 function 在其自己的 scope 中工作。
最外面的 function 将n
的值传递给下一个 function。 所以每个后续的 function 创建它自己的副本并从副本中减去 1,从不触及最外层函数 scope 中的n
。
但是,这对于列表、对象等来说是不同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.