关于c#:StackOverflowException当我多次调用同一个函数时

StackOverflowException when I call the same function many times

我正在创建一个函数,它在特定的坐标中创建一个点,称其自身移动到每个基点(直到一个标记限制)。

存储超过5000个位置时,出现StackOverflowException错误。

更简单:我创建的点的坐标只移动到北方,仍然给出相同的错误

*北界、纬度和经度是常数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void CreatePosition(decimal latitude, decimal longitude)
{
    boolean end = true;

    Positions.Add(new Position(latitude, longitude));

    if (NorthLimit > (latitude + LatitudeDeviation))
    {
      CreatePosition(latitude + LatitudeDeviation, longitude);
      end = false;
    }

    if (end == true)
    {
      // It ends :)
    }
}

我应该采取什么措施?


回答你编辑过的问题,你刚往北走。

您需要将递归算法转换为迭代算法。这可能会变得相当复杂——埃里克·利珀特有一个关于不同技术的精彩博客系列(第1部分,第2部分)——但在你的例子中,这很简单。

1
2
3
4
5
6
7
8
9
10
11
public void CreatePosition(decimal latitude, decimal longitude)
{
    Positions.Add(new Position(latitude, longitude))

    for (decimal currentLatitude = latitude + LatitudeDeviation;
         currentLatitude <= NorthLimit;
         currentLatitude += LatitudeDeviation)
    {
        Positions.Add(new Position(currentLatitude , longitude));
    }
}