Java计数每次递归调用的结束

时间:2017-01-18 02:47:15

标签: java recursion

我有一个绘制n代线条图案的程序。从第0代中的单个水平线开始,每个开放边缘用作另一垂直线的中点。图为n = 0,n = 1和n = 2的运行结果。 http://i.imgur.com/jM11wKG.jpg

我这样调用我的方法,其中x被初始化为屏幕的中心,步骤是步数。

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行的乘数,再次更新为在n = 2中添加的4等。

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

1 个答案:

答案 0 :(得分:1)

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

希望这可以解决您的问题。