好的,我正在尝试创建一个递归算法,可以生成一系列圆。
目前可以看到,我已经创建了圆形类并尝试使用递归,但是很明显,我对这些内容还比较陌生。
现在,我已经在正确的位置上绘制了所有椭圆,并在每个圆中包含了一个颜色对象。我的目标是让随着圆的产生它们的颜色发生变化,使得每组圆都是一定深度的绿色(如上面的例子所示)。
然而,目前不同深度的绿色被应用于了错误的圆。如下图所示:
如果有人能猜测出这是为什么,我将非常感激。谢谢。
好的,我正在尝试创建一个递归算法,可以生成一系列圆。
目前可以看到,我已经创建了圆形类并尝试使用递归,但是很明显,我对这些内容还比较陌生。
现在,我已经在正确的位置上绘制了所有椭圆,并在每个圆中包含了一个颜色对象。我的目标是让随着圆的产生它们的颜色发生变化,使得每组圆都是一定深度的绿色(如上面的例子所示)。
然而,目前不同深度的绿色被应用于了错误的圆。如下图所示:
如果有人能猜测出这是为什么,我将非常感激。谢谢。
createCircles()
时,应在中心绘制一个大圆,并递归地调用自身3次以绘制3个较小的圆。 y
坐标始终保持不变,可以通过加减原始圆的半径来重新计算x
坐标。请保留HTML标签。public void createCircles(int x, int y, int rad) {
Circle myCircle = new Circle(x, y, rad);
circles.add(myCircle);
createCircles(x - (2*rad), y, rad/3);
createCircles(x, y, rad/3);
createCircles(x + (2*rad), y, rad/3);
}
对于溢出错误,您可以设置一个终止条件来限制rad
的大小,例如:
if (rad < 5) {
return;
}
public void createCircles(int x, int y, int rad){
int myX = x/3;
int myRad = rad/3;
if(rad != 0){
Circle myCircle = new Circle(myX, y, myRad);
circles.add(myCircle);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
}
}
我很感激现在我得到了一个溢出错误,因为我没有递归的退出条件。
递归算法确实需要一个终止条件。
在您的情况下,一旦圆足够小,您不希望继续递归。因此,基本上你只需包装这里的三个递归调用:
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
if (myRad > 0) {
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
createCircles(myX, y, myRad);
}
paint
方法需要传入边界框的左上角点。在绘制时,只需从x
和y
中减去rad
即可。 - Warlord