堆栈结束后参数值是否在 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 对于一个函数是相同的。
这是 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 对于一个函数是相同的。