我正在制作一个简单的绘图应用程序,我需要创建一个" fill"函数用户将输入x,y值,该函数应该假设4个连接的邻居,我试图使用递归来做到这一点,但程序突然停止。 这是我的功能代码:
void fill(int x, int y, struct pixels* screen)
{
int xx, yy, x1, y1;
for (xx = -1; xx <= 1; xx++)
{
for (yy = -1; yy <= 1; yy++)
{
x1 = x + xx;
y1 = y + yy;
if ((x1 >= 0) && (x1 < screen->width))
{
if ((y1 >= 0) && (y1 < screen->height))
{
if (screen->pixel[x1][y1] = '.')
{
screen->pixel[x1][y1] = '*';
fill(x1, y1, screen);
}
}
}
}
}
}
here's an image of how it should work when the user enters "fill 6 20"
答案 0 :(得分:0)
递归方法的问题在于较大的图像往往会导致堆栈溢出,因为最大数量的递归调用由大型&#34;边界&#34;的大小控制。被填补。
可以节省堆栈溢出的一种方法是使用动态分配的项目队列。每个队列元素将存储 if !strings.Contains(err.Error(), "timed out") {
fmt.Printf("resulting error not a timeout: %s", err)
}
个坐标对。最初你会将{X, Y}
,x
传递给队列中的函数,然后启动循环直到队列为空。
每次提取队列的第一个元素时,它都会成为您当前的y
,x
。然后以相同的方式执行两个嵌套循环,除了调用y
而不是将fill(x1, y1, screen);
添加到队列的末尾。