我正在为Minecraft中的一个过程编写一个程序,它应该通过替换你看不到的块来编辑世界并“清理它”。
所以情况是立方块的3D世界。该程序需要识别一个空气体,并从每个区块的所有方向传播,以查看是否有更多的空气接触它。我在jython中编写了一个与MCEdit结合使用的递归函数(jython基本上是java和python之间的桥梁)。
问题的根源是每个调用创建5个新调用。 一个示例函数:
def checkAir(coordinate):
#check if there's air and if so, add to a list
for direction in directions:
nextCoordinate = direction.increment(coordinate)
checkAir(nextCoordinate)
现实中的功能要复杂得多。除此之外,在继续之前,它将确保它不会回到刚刚来的坐标,它会检查包含空气体坐标的列表,看它是否已经存在。如果是这样,它将不会进行更多的递归调用。
因此问题的根源是RuntimeError:超出了最大递归深度。 AKA StackOverflow。
我想知道如何用更迭代的方法编写这个程序,以防止堆栈溢出错误。如果你不懂python,我根本不介意java。我可以自己翻译。感谢您的帮助!
答案 0 :(得分:1)
您可以使用堆栈等数据结构从递归算法传递到迭代算法:
SELECT GROUP_CONCAT(UserID) as string FROM Users;