【问题标题】:Understanding the flow of execution of a recursive function with two self calls了解具有两个自调用的递归函数的执行流程
【发布时间】:2021-02-09 19:41:52
【问题描述】:

我需要帮助了解此功能的工作原理:

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()

此函数创建一个带有大 Y 形分支的对称分支图形,两个较小的 Y 形分支悬挂在较大 Y 形分支的每个臂的末端。该函数以“海龟”(当它在屏幕上移动时在其后面留下一条线的小箭头)从它绘制的最后一个较小分支的尖端向后四次结束,并在它从较大分支的开头开始的地方结束分支。那么如果 self 在该语句之前调用从 n 的值中减去 1,那么在函数完成时 n = 4 是如何实现的呢?第一次自我调用是否会遍历函数的前几行,直到 n = 0,然后遍历函数的其余部分?在这种情况下,第二个自调用语句的第一个实例的 n 值是多少? 4? 0?我想我显然误解了一些东西,并希望有任何资源来帮助我了解我在做什么。

【问题讨论】:

标签: python recursion turtle-graphics execution


【解决方案1】:

最外层函数结束时n仍然为4的原因是每个函数都有自己的n副本。每个函数都在自己的范围内工作。

最外面的函数将n 的值传递给下一个函数。因此,每个后续函数都会创建自己的副本并从副本中减去 1,从不触及最外层函数范围内的 n

不过,这对于列表、对象等来说是不同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2016-01-03
    • 2021-11-24
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多