Java:递归|将递归树绘制为图形| Won';不要调用第二种方法

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

所以我试图用递归和小程序画一棵树。我的分支生成的结果很好,但从未调用该方法的第二次调用。我一直在寻找其他解决方案,但似乎找不到任何类似于我的问题的方法。如果我注释掉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 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);
    // ...
}