我正在尝试开发一种寻路算法,通过跟踪从初始位置到最终位置的直线来找到到达点的最近路径。然后我测试有障碍物的交叉点(我游戏中的所有交叉点都是矩形的)然后绘制两条新线,一条线到障碍物的每个可见角落。然后,我从这两个角绘制线到端点,并为路径的每个分支重复交叉测试。
我的问题是:如何在没有递归的Lua 中传播我的分支路径?使用递归似乎很容易,但如果我的路径太长,我不想冒着堆栈溢出和崩溃的风险。
如果我使用的技术有技术术语,请告诉我。我愿意尽我所能做自己的研究。
答案 0 :(得分:1)
有递归和迭代。 Lua支持"无限递归"通过尾调用,所以如果你可以用尾调用来表达你的递归,就没有堆栈溢出的风险。例如:
function f(x)
if x==0 then return 0 end -- end recursion
.... Do stuff ...
return f(x-1)
end
Lua编程的6.3节(在线提供)讨论了这一点。
如果你无法通过尾调用确定一种方法,那么你必须使用迭代。例如,从一个路径开始,使用while循环测试多少个交叉点(0时退出循环);循环调用一个计算两个新路径的函数;每个路径都添加到列表中; while循环在路径循环中(因为路径数增加);路径长度可以同时计算;一些路径将是死路而且将被丢弃;有些会是周期性的,应该放弃;其余的将到达目的地。然后保持最短路径或旅行时间(不一定相同)。