Program: 58602
Project: 58602
Buggy source:
public float calculateRecursiveLayout(IDrawAbleNode node,float fRadius,float fParentAngle,float fLayer,float fNodeSize,float fXCoordOfParent,float fYCoordOfParent){
  if (fLayer <= fDepth) {
    float fNumberOfNodesInNewLayer=tree.getNumberOfElementsInLayer((int)fLayer);
    if (tree.hasChildren(node)) {
      ArrayList<IDrawAbleNode> childsOfCurrentNode=new ArrayList<IDrawAbleNode>();
      childsOfCurrentNode=tree.getChildren(node);
      float fDeltaRadius=fRadius;
      float fChildSpace=(fDeltaRadius * (float)Math.PI) / (childsOfCurrentNode.size() + 1);
      float fNumberOfChildsOfNode=childsOfCurrentNode.size();
      float fChildCount=0.0f;
      float fChildAngle=0.0f;
      for (      IDrawAbleNode tmpChild : childsOfCurrentNode) {
        fChildCount++;
        fChildAngle=calculateChildAngle(fParentAngle,fChildSpace,fDeltaRadius,fChildCount);
        float fRealChildAngle=fParentAngle - ((fChildAngle * (fNumberOfChildsOfNode - 1)) / 2) + fChildAngle * (fChildCount - 1);
        calcualteChildPosition(fDeltaRadius,fRealChildAngle,fChildCount,fXCoordOfParent,fYCoordOfParent);
        float fXCoord=getFXCoord();
        float fYCoord=getFYCoord();
        float fLayerOfBranch=calculateRecursiveLayout(tmpChild,fDeltaRadius,fRealChildAngle,fLayer + 1,fNodeSize,fXCoord,fYCoord);
        drawLine(fXCoordOfParent,fYCoordOfParent,fXCoord,fYCoord);
        tmpChild.setDetailLevel(EDrawAbleNodeDetailLevel.Low);
        placeNode(tmpChild,fXCoord,fYCoord,0,fNodeSize,0.2f);
      }
    }
  }
  return fLayer;
}

Fixed version (ground truth):
public float calculateRecursiveLayout(IDrawAbleNode node,float fRadius,float fParentAngle,float fLayer,float fNodeSize,float fXCoordOfParent,float fYCoordOfParent){
  if (fLayer <= fDepth) {
    float fNumberOfNodesInNewLayer=tree.getNumberOfElementsInLayer((int)fLayer);
    if (tree.hasChildren(node)) {
      ArrayList<IDrawAbleNode> childsOfCurrentNode=new ArrayList<IDrawAbleNode>();
      childsOfCurrentNode=tree.getChildren(node);
      float fDeltaRadius=fRadius;
      float fChildSpace=(fDeltaRadius * (float)Math.PI) / (childsOfCurrentNode.size() + 1);
      float fNumberOfChildsOfNode=childsOfCurrentNode.size();
      float fChildCount=0.0f;
      float fChildAngle=0.0f;
      for (      IDrawAbleNode tmpChild : childsOfCurrentNode) {
        fChildCount++;
        fChildAngle=calculateChildAngle(fParentAngle,fChildSpace,fDeltaRadius,fChildCount);
        float fRealChildAngle=fParentAngle - ((fChildAngle * (fNumberOfChildsOfNode - 1)) / 2) + fChildAngle * (fChildCount - 1);
        calcualteChildPosition(fDeltaRadius,fRealChildAngle,fChildCount,fXCoordOfParent,fYCoordOfParent);
        float fXCoord=getFXCoord();
        float fYCoord=getFYCoord();
{
          float fLayerOfBranch=calculateRecursiveLayout(tmpChild,fDeltaRadius,fRealChildAngle,fLayer + 1,fNodeSize,fXCoord,fYCoord);
          drawLine(fXCoordOfParent,fYCoordOfParent,fXCoord,fYCoord);
          fNodeSize=HyperbolicRenderStyle.MAX_NODE_SIZE * (float)Math.pow(HyperbolicRenderStyle.NODE_SCALING_PER_LAYER,fLayer);
          tmpChild.setDetailLevel(EDrawAbleNodeDetailLevel.Low);
          placeNode(tmpChild,fXCoord,fYCoord,0,fNodeSize,fNodeSize);
        }
      }
    }
  }
  return fLayer;
}