避免递归导致堆栈溢出

时间:2019-04-08 09:33:31

标签: c recursion segmentation-fault stack-overflow

我实际上是在编写一个程序,以在C语言中生成完美的迷宫。

我为此使用递归,当我产生太大的迷宫时,我会得到堆栈溢出。

static void fill_maze(int x, int y, bool **tab, dimensions_t dim)
{
    int *i;
    int d[4] = {0, 1, 2, 3};
    int xx;
    int yy;

    tab[y][x] = false;
    shuffle_array(d, 4);
    FOREACH(i, d) {
        xx = x + take_dirnum(*i, 0);
        yy = y + take_dirnum(*i, 1);
        if (is_map_valid(tab, xx, yy, dim)) {
            tab[AVG(y, yy)][AVG(x, xx)] = false;
            fill_maze(xx, yy, tab, dim);
        }
    }
}

我的foreach宏:

#define FOREACH(item, array) \
    for(int keep = 1, \
            count = 0,\
            size = sizeof (array) / sizeof *(array); \
        keep && count != size; \
        keep = !keep, count++) \
      for(item = (array) + count; keep; keep = !keep)

我正在寻找一种将其转换为循环或避免堆栈溢出但保留递归的方法。谢谢您的帮助!

0 个答案:

没有答案