首页 > 解决方案 > 当我多次调用同一个函数时出现 StackOverflowException

问题描述

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

存储超过 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 :)
    }
}

我应该采取什么措施?

标签: c#.netwpfmathcoordinates

解决方案


回应您编辑的问题,您刚刚向北移动。

您需要将递归算法转换为迭代算法。这可能会变得相当复杂 - Eric Lippert 有一个关于不同技术的精彩博客系列(第 1部分,第 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));
    }
}

推荐阅读