Java:递归|将递归树绘制为图形| Won';不要调用第二种方法
所以我试图用递归和小程序画一棵树。我的分支生成的结果很好,但从未调用该方法的第二次调用。我一直在寻找其他解决方案,但似乎找不到任何类似于我的问题的方法。如果我注释掉branch()的第一个调用,那么第二个调用可以工作,问题就反过来了。谢谢你的帮助Java:递归|将递归树绘制为图形| Won';不要调用第二种方法,java,recursion,Java,Recursion,所以我试图用递归和小程序画一棵树。我的分支生成的结果很好,但从未调用该方法的第二次调用。我一直在寻找其他解决方案,但似乎找不到任何类似于我的问题的方法。如果我注释掉branch()的第一个调用,那么第二个调用可以工作,问题就反过来了。谢谢你的帮助 public class Tree extends Applet{ int x,y,x1,x2,y1,y2; int width,height; int len,temp1 = 0,temp2 = 0; double bran,count; int
public class Tree extends Applet{
int x,y,x1,x2,y1,y2;
int width,height;
int len,temp1 = 0,temp2 = 0;
double bran,count;
int ang;
double rand;
Image page;
Graphics draw;
public void init(){
width = 1000;
height = 600;
setSize(width,height);
setBackground(Color.black);
count = 21;
bran = 50;
//ang = 10;
page = createImage(width,height);
draw = page.getGraphics();
x = width/2;
y = height;
x1=x;
y1=y;
x2=x1;
y2=y1-100;
}
public void paint(Graphics g){
draw.setColor(Color.green);
branch(draw,x2,y2,20);
g.drawImage(page,0,0,width,height,this);
}
public void branch(Graphics g,int x,int y,int ang){
count-=1;
if(count%2 == 0)
bran-=2;
if(count == 20){
g.drawLine(x1,y1,x2,y2);
}
else if(count > 0){
x1 = x;
y1 = y;
rand = ang * (Math.PI/180);
int xChange = (int) (Math.sin(rand)*bran);
int yChange = (int) (Math.cos(rand)*bran);
y2 = y-yChange;
/*System.out.printf("X1 | %3d \t X2 | %3d \t Y | %3d \t ChangeX | %3d \t ChangeY | %3d \n",
x1-xChange,x1+xChange,y2,xChange,yChange);*/
g.setColor(Color.blue);
g.drawLine(x1,y1,x1-xChange,y2);
g.setColor(Color.orange);
g.drawLine(x1,y1,x1+xChange,y2);
branch(g,x1-xChange,y2,ang+10);
temp1++;
System.out.print("End1 | "+temp1);
branch(g,x1+xChange,y2,ang+10);
temp2++;
System.out.println("\tEND2 | "+temp2);
}
}//End of branch
}当到达第二个调用时,
count,所以我做了更改,不得不更改if(count==20){g.drawLine(x1,y1,x2,y2);},因为它将通过,而不会显示任何其他内容。它仍然不会显示/遍历所有递归调用。我不知道它是否只需要缓冲时间,但它只在分支的第10次调用(g,x1-xChange,y2,ang+10,count-1)时绘制新分支。你能编辑问题中的代码以反映这一点吗?抱歉,我在做了一些修改后修复了它。我将x1-xChange和x1+xChange定义为xEnd1和xEnd2,现在可以工作了。
public void branch(Graphics g, int x, int y, int ang, int count) {
// ...
branch(g, x1-xChange, y2, ang+10, count - 1);
// ...
branch(g, x1+xChange, y2, ang+10, count - 1);
// ...
}