我实际上是在编写一个程序,以在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)
我正在寻找一种将其转换为循环或避免堆栈溢出但保留递归的方法。谢谢您的帮助!