c# - 当我多次调用同一个函数时出现 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 :)
}
}
我应该采取什么措施?
解决方案
回应您编辑的问题,您刚刚向北移动。
您需要将递归算法转换为迭代算法。这可能会变得相当复杂 - 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));
}
}
推荐阅读
- c# - 在 ListView 中显示 VideoCapture 帧
- android - 如何为 Android 应用程序创建 TikTok / Musical.ly 的功能?
- docker - 如何从外部源连接到托管在 docker / rancher 容器中的 Logstash 服务
- javascript - 如何返回新的 javascript 声明对象的名称
- angular - entryComponents 在 Angular 6 中不起作用
- qt - 在 QStyledItemDelegate 中覆盖 Qt 样式表
- machine-learning - 文本内容相关性检查
- php - 使用增量运算符后输出小于预期
- javascript - 无法让我的 div 到达页面的顶部和侧面
- android - 在相机意图中选择图像大小