即使退出条件,欧几里得树对象堆栈溢出错误

时间:2017-02-16 08:49:18

标签: java recursion processing

我正在尝试在Processing / Java中编写一个名为Branch的类。我通过全局变量给它一个转义条件,但它创建了太多的递归和堆栈溢出。我很难理解为什么。

 int maxIterations = 10;
 int iterations = 0;

class Branch 
{
  //props
  float angle, scale, drawingScale;
 PVector origin, destination;
 //konstrukt
 Branch (float _x, float _y, float _angle, float _scale) {
    origin = new PVector(_x,_y);
    angle = _angle;
    scale = _scale;
    calculateDestination();
    drawMyself();
    rebirth();
  }

  void rebirth() {
    if(iterations < maxIterations) {
      Branch bLeft = new Branch(destination.x,destination.y,angle-50,100);
      Branch bRight = new Branch(destination.x,destination.y,angle+50,100);
      iterations++;
    }
  }

  void calculateDestination() {
    //se till att skala alltid går uppåt.
    scale = abs(scale);
    scale = -scale;
    destination = new PVector(origin.x+angle,origin.y+scale);
  }

  void drawMyself() { 
    drawingScale = scale * -1;
    strokeWeight(10);
    beginShape(LINES);
    vertex(origin.x,origin.y);
    vertex(destination.x, destination.y);
    endShape();

    ellipseMode(CENTER);
    fill(255);
    ellipse(origin.x,origin.y,scale/3,scale/3);
    ellipse(destination.x,destination.y,scale/3,scale/3);

  }


}//End Branch;

任何有助于理解它溢出的原因或如何有效地在对象中使用递归的任何帮助都是非常值得的!

1 个答案:

答案 0 :(得分:1)

创建两个新分支后,增加迭代的唯一位置是rebirth()。问题是永远不会达到这种增量。

你所拥有的是rebirth()来电Branch()来调用rebirth()来调用Branch()等等,而iterations++永远不会被执行。

在调用iterations之前,您应该增加Branch。此外,将其用作参数而不是全局变量