我无法理解在同一函数中多次调用该函数的递归函数如何工作(我相信多次递归)。我想知道是否有人可以向我解释。
我是一个初学者,正在学习如何用python编码。我到达了一个阶段,在其中使用乌龟给我展示了一个递归函数,并且不得不猜测它会绘制什么。我完全错了,但是它画了一个树状图。
import turtle
t = 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)
我完全理解了它是如何绘制第一个分支的,但是一旦n=1
我感到困惑,因为我假设在那一点draw(t, length, n-1)
上调用when时,n = 0,因此该函数将返回并且什么也不会发生。但是,它所做的事情完全不同,我想知道操作的顺序是什么,为什么这样做。我知道它的作用,但我不知道为什么。
以程序draw(t, length, n-1)
何时在何时执行为例n=1
,那么您正确的是draw
再次进入n=0
并点击返回。
接下来发生的是,您draw
在使用调用之后立即返回上一个,n-1
而要执行的下一行是t.rt (2*angle)
您应该可以自己亲自写出来。
以以下示例为例:
t = turtle.Turtle()
draw(t, 5, 1)
发生的情况是这样的:(调用堆栈显示在两列中)
[original call] [recursive call]
if n == 0:
#nothing
angle = 50
t.fd(length*n)
t.lt(angle)
draw(t, length, n-1)
if n == 0:
return
t.rt (2*angle)
draw(t, length, n-1)
if n == 0:
return
t.lt(angle)
t.bk(length*n)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句