a"填充功能"在c语言中使用递归

时间:2016-03-13 11:45:54

标签: c recursion

我正在制作一个简单的绘图应用程序,我需要创建一个" 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"

1 个答案:

答案 0 :(得分:0)

递归方法的问题在于较大的图像往往会导致堆栈溢出,因为最大数量的递归调用由大型&#34;边界&#34;的大小控制。被填补。

可以节省堆栈溢出的一种方法是使用动态分配的项目队列。每个队列元素将存储 if !strings.Contains(err.Error(), "timed out") { fmt.Printf("resulting error not a timeout: %s", err) } 个坐标对。最初你会将{X, Y}x传递给队列中的函数,然后启动循环直到队列为空。

每次提取队列的第一个元素时,它都会成为您当前的yx。然后以相同的方式执行两个嵌套循环,除了调用y而不是将fill(x1, y1, screen);添加到队列的末尾。