我正在做一个递归程序,在执行递归函数期间,它显示了堆栈溢出错误。没有完成这个递归函数我就无法继续。请有人帮帮我... 这是我所做的代码:
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);
}
}
}
答案 0 :(得分:1)
问题是您的方法永远不会退出while
循环,因为您有while (true)
。因此,递归算法会一直调用自己越来越深,直到堆栈空间不足为止。
你需要这样做,以便你的循环在某个时刻退出,无论是使用return
还是最好使用while
语句中的更好条件。
注意,使用while (true)
通常被认为是不好的做法。除非绝对必要,否则你要避免这样做。