多重递归如何在python中工作

萨拉罗特

我无法理解在同一函数中多次调用该函数的递归函数如何工作(我相信多次递归)。我想知道是否有人可以向我解释。

我是一个初学者,正在学习如何用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章