我刚刚开始学习Python,我不理解调用内部函数的能力。
下面是一个例子:
import turtle
from turtle import left, right, forward
size = 10
def hilbert(level, angle):
if level == 0:
return
turtle.color("Blue")
turtle.speed("Fastest")
right(angle)
hilbert(level - 1, -angle)
forward(size)
left(angle)
hilbert(level - 1, angle)
forward(size)
hilbert(level - 1, angle)
left(angle)
forward(size)
hilbert(level - 1, -angle)
right(angle)
这到底是怎么回事?
谢谢。
最佳答案
我不能接受递归的美不是理解它,也不能接受我自己可能无法理解它的事实!所以在咨询了一个朋友之后,我终于意识到堆栈是如何工作的。这里是我的空间填充希尔伯特曲线的等效代码,如果水平=2和角度=90°:
import turtle
from turtle import left, right, forward
size = 10
angle = 90
turtle.hideturtle()
turtle.color("Blue")
turtle.speed("Fastest")
''' Assume we have two levels. '''
right(angle)
# 1st hilbert call
right(-angle)
forward(size)
left(-angle)
forward(size)
left(-angle)
forward(size)
right(-angle)
# Continue from first call of hilbert
forward(size)
left(angle)
# 2nd hilbert call
right(angle)
forward(size)
left(angle)
forward(size)
left(angle)
forward(size)
right(angle)
# Continue from second call of hilbert
forward(size)
# 3rd hilbert call
right(angle)
forward(size)
left(angle)
forward(size)
left(angle)
forward(size)
right(angle)
# Continue from third call of hilbert
left(angle)
forward(size)
# 4th call of hilbert
right(-angle)
forward(size)
left(-angle)
forward(size)
left(-angle)
forward(size)
right(-angle)
# Continue from fourth call of hilbert
right(angle)
尤里卡!