Recursion 基于直线和交点的寻路

Recursion 基于直线和交点的寻路,recursion,lua,line,path-finding,Recursion,Lua,Line,Path Finding,我正在尝试开发一种寻路算法,通过跟踪从初始位置到最终位置的一条直线,找到距离点最近的路径。然后我测试与障碍物的交叉点(在我的游戏中所有障碍物都是矩形的),然后画两条新的线,一条到障碍物的每个可见角落。然后,我从这两个角画线到端点,并对路径的每个分支重复相交测试 我的问题是:如何在没有递归的情况下在Lua中传播分支路径?使用递归似乎很容易,但如果路径太长,我不想冒堆栈溢出和崩溃的风险 如果我使用的技术有一个技术术语,请告诉我。我喜欢在可能的时候做我自己的研究。有递归和迭代。Lua通过尾部调用支持“

我正在尝试开发一种寻路算法,通过跟踪从初始位置到最终位置的一条直线,找到距离点最近的路径。然后我测试与障碍物的交叉点(在我的游戏中所有障碍物都是矩形的),然后画两条新的线,一条到障碍物的每个可见角落。然后,我从这两个角画线到端点,并对路径的每个分支重复相交测试

我的问题是:如何在没有递归的情况下在Lua中传播分支路径?使用递归似乎很容易,但如果路径太长,我不想冒堆栈溢出和崩溃的风险


如果我使用的技术有一个技术术语,请告诉我。我喜欢在可能的时候做我自己的研究。

有递归和迭代。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循环在paths循环中(因为路径的#增加);可以同时计算路径长度;有些道路将是死胡同,将被丢弃;其中一些将是周期性的,应该取消;其余的将到达目的地。然后保留路径或旅行时间最短的(不一定相同)