<p><code>drawTree</code>函数不会永远调用自己,因此递归调用之后的语句最终会被执行。当<code>depth</code>==<code>LIMIT</code>处的递归调用返回上一个调用,其中<code>depth</code>==<code>LIMIT-1</code>。在</p>
<p>下面是一个稍微修改过的代码版本,其中包含两个<code>print</code>调用,以帮助跟踪执行情况。在</p>
<p>我还做了一些其他的小改动。我简化了<code>SCALAR</code>的计算:<code>0.5 * sqrt(2)</code>==<code>sqrt(0.5)</code>,我只在乌龟画正方形时才放下笔。我还添加了一个<code>turtle.mainloop()</code>调用,这样当绘图完成时窗口将保持打开状态。在</p>
<pre><code>from __future__ import print_function
import turtle
LIMIT = 3
SCALAR = 0.5 ** 0.5
INDENT = ' ' * 4
def drawTree(size, depth, branch):
print(INDENT * depth, branch, depth, 'start')
drawSquare(size)
if depth + 1 <= LIMIT:
t.left(90)
t.forward(size)
t.right(45)
drawTree(size * SCALAR, depth + 1, 'left ')
t.forward(size * SCALAR)
t.right(90)
drawTree(size * SCALAR, depth + 1, 'right')
t.left(90)
t.backward(size * SCALAR)
t.left(45)
t.backward(size)
t.right(90)
print(INDENT * depth, branch, depth, 'stop')
def drawSquare(sideLength):
t.down()
for i in range(4):
t.forward(sideLength)
t.left(90)
t.up()
t = turtle.Pen()
t.up()
t.goto(-100, -200)
drawTree(100.0, 0, 'root')
turtle.mainloop()
</code></pre>
<p><strong>输出</strong></p>
^{pr2}$