如何在调用递归函数时克服c#中的堆栈溢出异常

时间:2016-04-16 12:38:03

标签: c# recursion

我正在做一个递归程序,在执行递归函数期间,它显示了堆栈溢出错误。没有完成这个递归函数我就无法继续。请有人帮帮我... 这是我所做的代码:

   public void blob(int k, int l, int[,] MV1)
    {
        while (true)
        {
            if ((MV1[k, l] == 1) && (status[k, l] != 1))
            {
                count = count + 1;
                if (count < 6000)
                {
                    if (k < xmin)
                    {
                        X[Xr, 0] = k;
                        xmin = k;
                    }
                    if (l < ymin)
                    {
                        Y[Yr, 0] = l;
                        ymin = l;
                    }
                    if (k > xmax)
                    {
                        X[Xr, 1] = k;
                        xmax = k;
                    }
                    if (l > ymax)
                    {
                        Y[Yr, 1] = l;
                        ymax = l;
                    }
                    status[k, l] = 1;


                    if (l != (MV1.Length / MV1.GetLength(0)) - 1)
                    {
                        blob(k, l + 1, MV1);
                    }
                    if ((l != 0))
                    {

                        blob(k, l - 1, MV1);

                    }
                    if (k != MV1.Length - 1)
                    {
                        blob(k + 1, l, MV1);
                    }
                    if ((k != 0))
                    {

                        blob(k - 1, l, MV1);

                    }

                }
            }

1 个答案:

答案 0 :(得分:1)

问题是您的方法永远不会退出while循环,因为您有while (true)。因此,递归算法会一直调用自己越来越深,直到堆栈空间不足为止。

你需要这样做,以便你的循环在某个时刻退出,无论是使用return还是最好使用while语句中的更好条件。

注意,使用while (true)通常被认为是不好的做法。除非绝对必要,否则你要避免这样做。