Ich mache ein rekursives Programm und während der Ausführung einer rekursiven Funktion zeigt es Stapelüberlauf Fehler. Ich kann nicht fortfahren, ohne diese rekursive Funktion abzuschließen. Bitte jemand mir helfen ... Dies ist der Code, den ich getan habe:Wie Stack-Overflow-Ausnahme in C# beim Aufruf einer rekursiven Funktion zu überwinden
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);
}
}
}
Ich habe Ihre Bearbeitung zurückgesetzt. Sie können Ihre Frage nicht ändern, um sie inhaltlich zu ändern, sobald eine Antwort erfolgt ist. Die Antwort würde nach Ihrer Bearbeitung nicht länger gelten. Wenn Sie eine * neue * Frage haben, dann stellen Sie eine andere Frage, aber diese Frage muss nun so bleiben wie sie ist. Wenn Sie eine Klärung Ihrer Frage vorgenommen haben, die sie inhaltlich nicht ändert, können Sie sie ändern. –
Eigentlich schrieb ich die while, um den Stapelüberlauffehler zu überprüfen. Aber bevor ich dir die Frage gestellt habe, habe ich vergessen zu entfernen, während (wahr). Das ist tatsächlich passiert. – Sreeraj
Der Stack wird wahrscheinlich überflogen, weil Sie das Array MV1 (höchstens) 6000 mal auf den Stack setzen. Der [Stapel ist begrenzt] (http://stackoverflow.com/questions/28656872/why-is-stack-size-in-c-sharp-exactly-1-mb) Sie wissen. Sie können Ihren Code [in eine Iteration anstelle einer rekursiven Funktion] umschreiben (http://stackoverflow.com/questions/159590/way-to-go-from-recursion-to-iteration). – venerik