我正在创建一个函数,该函数在特定坐标中创建一个点,该函数会调用自身移动到每个基点(直到特定的极限)。
当存储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 :)
}
}
我应该采取什么措施?
答案 0 :(得分:4)
对您已编辑的问题的回答是,您正向北移动。
您需要将递归算法转换为迭代算法。这可能会变得非常复杂-埃里克·利珀特(Eric Lippert)撰写了精彩的博客系列,介绍了不同的技术(part 1,part 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));
}
}