堆栈结束后参数值是否在 python 中重置?

Does the argument value reset in python after a stack ends?

这是 Allen Downey 的问题:想想 Python(它画了一个带树枝的闪电状结构,但我不明白树枝是如何形成的),我已经看到了 2 个解决方案之前,但其中 none 解释了第二部分的工作原理。

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)
    """ The turtle draws 4 lines ( n = 4 ) of decreasing length at an angle of 50 degrees """
    t.rt(angle * 2)  # Turns the turtle to an angle of 100 degrees to match the previous turns angle ?
    draw(t, length, n - 1)  
    t.lt(angle)  # Turns the turtle back to 50 degrees 
    t.bk(length * n)  


draw(t, 10, 4)


After drawing the basic skeleton when the n value reaches 0 and the pointer returns to t.rt(angle * 2 ) does the n value reset back to 4 ?

它不会重置“n”的值。

由于“draw”是一个递归函数,所以在程序结束之前有多个“draw”和“n”。


我建议你考虑 n 从 0 到 4 的每个值的输出。

  • 当 n = 0 时,没有任何反应。

  • 当n=1时,则

    • 乌龟向前移动(“长度=10”个单位),

    • 向左旋转(50),

    • 尝试在 n=0 处绘制但没有任何反应,

    • 右转(100)

    • 再次尝试在 n=0 处绘制但没有任何反应,

    • 向左(50)转原角度,

    • 回到起点

    • 刚成一条直线

  • 当n=2时,则

    • 乌龟向前移动(10*2个单位),向左旋转(50),

    • 向左旋转(50),

    • 尝试在 n=1 处绘制,以 50 度角 (cw) 绘制一条直线,

    • 右转(100)

    • 再次尝试在 n=1 处绘制,它绘制了一条 50 度角的直线(anti-cw),

    • 向左(50)转原角度,

    • 回到起点

    • 它只是一条直线(20个单位)和两条直线(10个单位)从第一条发散

等等...

重点是 n 对于一个函数是相同的。