C++ 用迭代法求解多调用递归

C++ 用迭代法求解多调用递归,c++,recursion,iteration,C++,Recursion,Iteration,我有一个程序,在(x+1,y),(x,y+1),(x-1,y)和(x,y-1)方向上,从自身向外生成分片,并递归调用自身,如下所示: void tileGenerate(int x, int y){ //generate a tile at (x, y) if (!tile[x + 1][y].generated) { tilegenerate(x + 1, y); } if (!tile[x][y + 1].generated) {

我有一个程序,在(x+1,y),(x,y+1),(x-1,y)和(x,y-1)方向上,从自身向外生成分片,并递归调用自身,如下所示:

void tileGenerate(int x, int y){
     //generate a tile at (x, y)
     if (!tile[x + 1][y].generated) {
          tilegenerate(x + 1, y);
     }
     if (!tile[x][y + 1].generated) {
          tilegenerate(x, y + 1);
     }
     if (!tile[x - 1][y].generated) {
          tilegenerate(x - 1, y);
     }
     if (!tile[x][y - 1].generated) {
          tilegenerate(x, y - 1);
     }

但是,生成磁贴会占用大量内存,并且会由于堆栈溢出而导致SEGFULTS(对吗?)。有没有一种方法可以迭代地模拟这个循环?我希望保留向外生成的特性,而不是只使用两个沿x和y方向的for循环,逐行生成。

这可能会导致深度递归的堆栈溢出,但更可能的是,这似乎没有任何界限。。。它只会在所有方向上生成分片,从现有分片数组的末端开始(包括使用负索引值),访问数组分片中不存在的部分会导致segfaults。这总是可能的,但由于没有任何尾部递归,您需要模拟堆栈。但是,segfault的一个更可能的原因是您没有任何条件在
磁贴
的边缘终止递归,这会导致访问矩阵外部。除了前面提到的关于观察磁贴阵列边缘的问题之外,我还注意到刚才注释中省略了代码,您实际上是在那里生成一个tile。。。你说内存很贵。如果在函数退出之前没有清理内存,那么每次递归都会增加大量内存。您可以将生成平铺内容的代码放在单独的函数中(您在注释当前所在的位置调用该函数),而不是与此代码内联。如果限制了数组的边界,则数组的边界已经生成,因此函数不会在边界上调用tilegenerate。我将研究如何将生成代码的范围限定到另一个函数中,并查看这是否会清除stack@BrydonGibson这应该是可行的,但您必须确保起始点不在边界上,否则对超过边界的项目的检查将导致错误。