当我多次调用同一函数时发生StackOverflowException

时间:2019-03-19 16:26:17

标签: c# .net wpf math coordinates

我正在创建一个函数,该函数在特定坐标中创建一个点,该函数会调用自身移动到每个基点(直到特定的极限)。

当存储5000个以上的位置时,出现StackOverflowException错误。

更容易:我创建的点的坐标仅向北移动,但仍给出相同的错误

* NorthLimit,LatitudeDeviation和LongitudeDeviation是常量。

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 个答案:

答案 0 :(得分:4)

对您已编辑的问题的回答是,您正向北移动。

您需要将递归算法转换为迭代算法。这可能会变得非常复杂-埃里克·利珀特(Eric Lippert)撰写了精彩的博客系列,介绍了不同的技术(part 1part 2)-但就您而言,这很简单。

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));
    }
}