将增长的递归转换为迭代?

时间:2016-08-05 21:28:52

标签: java python recursion

我正在为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。我可以自己翻译。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用堆栈等数据结构从递归算法传递到迭代算法:

SELECT GROUP_CONCAT(UserID) as string  FROM Users;