Java 小程序龟

Java applet turtle

所以我们刚进入 Turtle 小程序并在网上看到这段代码。

private void tree(int s)
{
   if (s < 8)
      return;

   forward(s);
   left(45);
   tree(s / 2);
   right(90);
   tree(s / 2);
   left(45);
   back(s);
}

这应该是结果的样子,但在我看来,乌龟停在我的红色圆圈所在的位置...

谁能解释为什么海龟会走得更远 AND 为什么海龟会开始两个子树?

因为如果我理解正确的代码,乌龟将向前移动 s 步,然后向左转 45 度,但不会向右转...

乌龟应该回到起点。让我们逐行剖析代码:

forward(s);

这画出了树的垂直树干。

left(45);

我们向左转,指向左上角。

tree(s / 2);

我们递归地调用 tree 并使用一半的基长,导致一棵新树按照我们指定的方向(向左 45 度)从我们的树干分叉。请注意,树将继续递归分支,直到基本长度变得小于 8 个单位(像素?)长。之后,它returns到它分裂的地方,分支的底部。

right(90);

画完左分支后,我们向右转 90 度,现在指向右上角。

tree(s / 2);

和以前一样,我们分开并开始在那个方向上画一棵树,底长的一半。

left(45);

我们向左转 45 度以重新定位,使我们笔直向上。

back(s);

乌龟returns到树的底部。


总而言之,代码以 45 度角向左分支,基本长度的一半,直到分支变得太短;之后,它会有效地向外旋转,同时绘制剩余的分支(先向左,然后向右)。