递归绘制圆形

4
我正在尝试绘制这个图像: 在此输入图片描述
public void drawCircle(int x, int y, int diameter, int it) {
    int d = diameter / 3;
    if (it == 0) {
        return;
    }
    g.setColor(Color.green);
    g.fillOval(x, y, d, d);
    drawCircle(x, y, d, it--); // centre
    drawCircle(x - d, y, d, it--); // left
    drawCircle(x + d, y, d, it--); // right

}

针对这个问题,忽略我画圆的实际位置 - 我稍后会更改它,因为它还不完全正确。但是,在我的程序逻辑中,我错在哪里?对我来说,我明显每次迭代都调用了画三个圆的方法。以下是我的错误:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.java2d.loops.ProcessPath.ProcessMonotonicCubic(Unknown Source)
at sun.java2d.loops.ProcessPath.ProcessCubic(Unknown Source)
at sun.java2d.loops.ProcessPath.doProcessPath(Unknown Source)
at sun.java2d.loops.ProcessPath.fillPath(Unknown Source)
at sun.java2d.pipe.BufferedRenderPipe.fillPath(Unknown Source)
at sun.java2d.pipe.BufferedRenderPipe.fill(Unknown Source)
at sun.java2d.pipe.BufferedRenderPipe.fillOval(Unknown Source)
at sun.java2d.SunGraphics2D.fillOval(Unknown Source)
at Draw.drawCircle(Draw.java:40)
at Draw.drawCircle(Draw.java:41)

这里是第40和41行:

g.fillOval(x, y, d, d);
drawCircle(x, y, d, it--); // centre

感谢你的帮助。
1个回答

4

在每次递归调用中,您的递归调用接收相同的it值,因为it--在递减之前返回it的值。

假设您希望在一次迭代中保留it的值,请将it - 1传递给递归调用,例如:

drawCircle(x, y, d, it - 1); // centre

1
it-- 返回 it 的值并减去 1;--it 先减去 1 再返回 it 的值。 - renke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接