【发布时间】:2019-08-10 06:14:27
【问题描述】:
我正在创建一个函数,该函数在特定坐标中创建一个点,它调用自身移动到每个基点(直到一个特定的限制)。
存储超过 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 :)
}
}
我应该采取什么措施?
【问题讨论】:
-
我认为这种方法没有达到您的预期。例如,它会一直向北移动一步,然后向南移动一步(回到起点),然后再向北移动,以此类推,直到永远。你的意思是让它继续在每个方向上行走,并且只在那个方向上行走直到它到达极限,即
Positions包含一个“十字”形状?还是您的意思是让它在边界内的网格中找到所有位置? -
我看不出递归应该如何结束。似乎
ifs 之一将始终为真,因此您不断地递归到该方法的深度,直到返回地址淹没您的堆栈。end = false;在这里完全没有意义,因为你从不检查它。 -
这些不是
if else块是故意的吗?理论上,一次调用CreatePosition可能会导致另外四次调用同一方法。 -
我不清楚你希望你的输出实际上是什么be。你能提供一些示例输入和输出吗?
标签: c# .net wpf math coordinates