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 度角向左分支,基本长度的一半,直到分支变得太短;之后,它会有效地向外旋转,同时绘制剩余的分支(先向左,然后向右)。
所以我们刚进入 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 度角向左分支,基本长度的一半,直到分支变得太短;之后,它会有效地向外旋转,同时绘制剩余的分支(先向左,然后向右)。