title: Java double-recursive call.
body: <p>I have an assignment that requires us to paint a tree of Pythagoras using recursion. The tree is started with the square ABCD and the points A and B are defined by mouse clicks. Everything seems to work until I get to the recursion where I can get either the left or right part of the tree to paint, but not both. I placed a comment where I believe I am running into problems. </p>
  
  <pre><code>import java.awt.*;
  import java.awt.event.*;
  import java.util.Random;
  import javax.swing.*;
  
  public class PythagorasTree extends JFrame
  {
      public static void main(String[] args)
      {
          new PythagorasTree();
      }
  
      PythagorasTree()
      {
          super("Pythagoras Tree");
          setSize(800,800);
          add("Center", new DrawingPanel());
          setVisible(true);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
  }
  
  class DrawingPanel extends JPanel
  {
      Random random = new Random();
  
      int centerX;
      int centerY;
      int clickCount = 0;
      float pixelSize;
      float rWidth = 10.0F;
      float rHeight = 7.5F;
      float red, green, blue;
  
      Point a = new Point();
      Point b = new Point();
      Point c = new Point();
      Point d = new Point();
      Point e = new Point();
      Point u = new Point();
  
  
      DrawingPanel()
      {
          addMouseListener(new MouseAdapter()
          {
              public void mousePressed(MouseEvent click)
              {
                  clickCount++;
                   if (clickCount == 1)
                   {
                       a.x = fx(click.getX());
                       a.y = fy(click.getY());
                       repaint();                 
                   }
  
                   if (clickCount == 2)
                   {
                      b.x = fx(click.getX());
                      b.y = fy(click.getY()); 
                      repaint();
                   }
  
              }
          });
      }
  
      void initgr()
      {
          Dimension d = getSize();
          int maxX = d.width - 1;
          int maxY = d.height - 1;
          pixelSize = Math.max(rWidth/maxX, rHeight/maxY);
          centerX = maxX/2; 
          centerY = maxY/2;
      }
  
      int iX(float x){return Math.round(centerX + x/pixelSize);}
      int iY(float y){return Math.round(centerY - y/pixelSize);}
      float fx(int x){return (x - centerX) * pixelSize;}
      float fy(int y){return (centerY - y) * pixelSize;}
  
      public void paintComponent(Graphics g)
      {
          initgr();
          super.paintComponent(g);
          setBackground(Color.white);
          g.setColor(Color.red);
  
          if (clickCount == 1)
              g.drawLine(iX(a.x), iY(a.y), iX(a.x), iY(a.y));
  
          if (clickCount &gt; 1)     
              drawTree(g,a,b);        
      }
  
      public void drawTree(Graphics g, Point first, Point second)
      {
  
          float xSquared = (float) Math.pow((second.x-first.x),2);  
          float ySquared = (float) Math.pow((second.y-first.y),2);
          float length = (float) Math.sqrt(xSquared + ySquared);
  
  
  
          if ( length &gt; .001)
          {
              u.x = second.x - first.x;
              u.y = second.y - first.y;   
  
              a.x = first.x;
              a.y = first.y;
  
              b.x = second.x;
              b.y = second.y;
  
              d.x = first.x + (u.y * -1);
              d.y = first.y + u.x;
  
              c.x = d.x + u.x;
              c.y = d.y + u.y;
  
              e.x = d.x + .5F * (u.x + (u.y*-1));
              e.y = d.y + .5F * (u.y + u.x);
  
  
  
              Polygon square = new Polygon();
              Polygon triangle = new Polygon();
  
              square.addPoint(iX(a.x), iY(a.y));
              square.addPoint(iX(b.x), iY(b.y));
              square.addPoint(iX(c.x), iY(c.y));
              square.addPoint(iX(d.x), iY(d.y));
  
              red = random.nextFloat();
              green = random.nextFloat();
              blue = random.nextFloat();      
              g.setColor(new Color(red, green, blue));
  
              g.fillPolygon(square);
  
              triangle.addPoint(iX(c.x), iY(c.y));
              triangle.addPoint(iX(d.x), iY(d.y));
              triangle.addPoint(iX(e.x), iY(e.y));
  
              red = random.nextFloat();
              green = random.nextFloat();
              blue = random.nextFloat();      
              g.setColor(new Color(red, green, blue));
  
              g.fillPolygon(triangle);    
  
  
              /* Problem code is here, tree will draw Left or Right depending on              which recursive call
               * is first in the code, but will never reach the 2nd call.
               */
  
  
              drawTree(g,d,e);  //Draw tree left
              drawTree(g,e,c);  //Draw tree right
          }
  
  
  
      }
  
  
  }
  
  class Point
  {
      public float x;
      public float y;
  
      public Point()
      {
  
      }
  }
  </code></pre>