Java计算每个递归调用的结束

Java计算每个递归调用的结束,java,recursion,Java,Recursion,我有一个程序,可以画n代线的图案。从第0代中的一条水平线开始,每条开放边充当另一条垂直线的中点。图中显示了分别以n=0、n=1和n=2运行的结果 我像这样调用我的方法一次,其中x被初始化到屏幕的中心,steps是步数 paintComponent(g,x, Direction.HORIZONTAL, steps); 该方法生成预期的输出并正确地绘制线条 public void paintComponent(Graphics g,Point point,Direction direction,

我有一个程序,可以画n代线的图案。从第0代中的一条水平线开始,每条开放边充当另一条垂直线的中点。图中显示了分别以n=0、n=1和n=2运行的结果

我像这样调用我的方法一次,其中x被初始化到屏幕的中心,steps是步数

paintComponent(g,x, Direction.HORIZONTAL, steps);
该方法生成预期的输出并正确地绘制线条

public void paintComponent(Graphics g,Point point,Direction direction, int n){

    if(n>=0){
        //length*=multiplier;
        double mid = length/2;
        Point e1;
        Point e2;
        if(direction==Direction.HORIZONTAL){ 
            e1 = new Point((int)(point.getX()-mid),(int)(point.getY()));
            e2 = new Point((int)(point.getX()+mid),(int)(point.getY()));
            g.drawLine((int)e1.getX(),(int)e1.getY(),(int)e2.getX(),(int)e2.getY());  
            direction = Direction.VERTICAL;
        }
        else{
            e1 = new Point((int)(point.getX()),(int)(point.getY()-mid));
            e2 = new Point((int)(point.getX()),(int)(point.getY()+mid));
            g.drawLine((int)e1.getX(),(int)e1.getY(),(int)e2.getX(),(int)e2.getY());
            direction = Direction.HORIZONTAL;
        }   
        n--;
        paintComponent(g,e1, direction, n);
        paintComponent(g,e2, direction, n); 
    }   
}
现在,我试图在每一代/每一步之后,通过一个乘数来改变线条的长度。第一行具有初始长度,然后对于n=1中添加的2行,长度将更新为length*=乘数,对于n=2中添加的4行,再次更新,以此类推


我在定义每个步骤的实际结束位置时遇到了一个问题,因此我可以在那里更新长度。我无法在下面的地方更新它,因为每个步骤都会多次进入循环。我试过迭代一个计数变量,但我也找不到放在哪里。

如果你想改变线的长度,那么你需要改变点e1和e2,当你的线是水平的,然后增加/减少e1.x和e2。根据您想要增加或减少它的值,当它是垂直的时候,在调用g.drawline方法之前,只改变e1.y和e2.y。 对于更改点位置,您可以使用point类的translate方法,在该方法中,您需要根据要操纵实际点的因子计算dx和dy的值

希望这能解决你的疑问