因此,我们刚进入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);
}


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

java - Java小程序乌龟-LMLPHP

谁能解释为什么乌龟走得更远,为什么乌龟会启动两个子树?

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

最佳答案

乌龟应该回到他开始的地方。让我们逐行分析代码:

forward(s);


这将绘制树的垂直树干。

left(45);


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

tree(s / 2);


我们以基本长度的一半递归调用tree,使新树从树干沿我们指定的方向分支(向左45度)。请注意,树将继续递归分支,直到基本长度小于8个单位(像素?)为止。然后,它返回到分支的底部。

right(90);


完成左分支的绘制之后,我们将向右旋转90度,以便现在指向右上角。

tree(s / 2);


像以前一样,我们拆分并开始在该方向上以一半的基本长度绘制一棵树。

left(45);


我们向左转45度以调整方向,使我们笔直向上。

back(s);


乌龟回到树的根部。



总共,代码以45度角向左分支,且基长为一半,直到分支变得太短为止。之后,它在绘制其余分支时有效地向外螺旋回去(先左,再右)。

关于java - Java小程序乌龟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37736113/

10-11 08:08