我已经获得了递归绘制Koch曲线和Koch Snowflake的任务。我似乎在输入与其他人一样的代码,但它根本不会工作。问题是,不是像它应该做的那样用自己的较小版本替换线,而是继续在一条线上,重复自己并且永远不会变小。这是我的代码。有人可以帮帮我吗?
public void draw(double level, double length)
{
if (level < 1)
{
myPencil.forward(length);
}
else
{
draw(level - 1, (length) / 3);
myPencil.turnLeft(60);
draw(level - 1, (length) / 3);
myPencil.turnRight(120);
draw(level - 1, (length) / 3);
myPencil.turnLeft(60);
draw(level - 1, (length) / 3);
}
}
答案 0 :(得分:0)
如果你手动迭代你的循环几次,也许会发生什么变得清晰;或者将printfs()放在所有路径中,打印输出级别和长度为next和next函数。
initial conditions: level = 2, length = 9
stack enter level length action
0 draw 2 9 call draw(1, 3)
1 draw 1 3 call draw(0, 1)
2 draw 0 1 myPencil.forward(1); return;
1 1 3 myPencil.turnLeft(60); call draw(0, 1)
2 draw 0 1 myPencil.forward(1); return;
1 1 3 myPencil.turnRight(120); call draw(0, 1)
2 draw 0 1 myPencil.forward(1); return;
1 1 3 myPencil.turnLeft(60); call draw(0, 1)
2 draw 0 1 myPencil.forward(1); return;
1 1 3 return;
0 2 9 myPencil.turnLeft(60); call draw(1, 3)
repeat steps above starting at line 2
答案 1 :(得分:-1)
您指的是myLength
,它可能保持不变,而不是实际的方法参数length
。这是正在减少的,所以你应该使用它。