Ich habe eine Frage in Bezug auf eine rekursive Funktion, die ich gemacht habe. Gibt es eine Möglichkeit, eine Funktion vollständig zu beenden, sobald ich die Zeile "return arraydenodes" erreiche? Da ich die Code-Ausführung mit Visual Studio befolgt habe und die Ausführung erst einmal zu der oben erwähnten Zeile kommt, kehrt sie zu dem Stack (oder glaube ich) direkt in das "else" von der while-Schleife zurück. Und deshalb laufen die path.Add
Zeilen weiter und geben mir ein anderes Ergebnis. Hier ist der Code.Beenden Sie vollständig von einer rekursiven Funktion
private Node[] checkTheOtherDude(Node start, Node endpadre, Node end, Node previousNodeTemp)
{
//Debug.Log(previousNode);
while(endpadre != null && !stop)
{
if (!Physics.Linecast(end.transform.position, endpadre.transform.position)) // end y endpadre se ven?
{
previousNode = endpadre;
Node newParent = endpadre.padre;
checkTheOtherDude(start, newParent, end, previousNode); // chequear n y n padre padre
}
else
{
//previousNode = endpadre;
path.Add(end);
path.Add(previousNode);
end = endpadre;
Node newParent = end.padre;
checkTheOtherDude(start, newParent, endpadre, previousNode);
}
}
stop = true;
path.Add(end);
path.Add(start);
path.Reverse();
arraydeNodes = path.ToArray();
return arraydeNodes;
}
Es scheint, dass ich das Problem gelöst haben, das Problem (oder zumindest glaube ich) war es die während Zustand änderte es zu while (endpadre != null && !stop && endpadre != start)
ich die endpadre != start
fehlte, so dass die Schleife rechts enden würde, wenn das Ende Der Knoten war derselbe wie der Startknoten.
Wenn Sie es richtig entwerfen, sollte es keine Rolle spielen. Wenn Sie in Schwierigkeiten geraten, macht Ihre rekursive Methode zu viel (Trennung von Bedenken) oder ist nicht richtig strukturiert. Wenn der innerste Aufruf beendet wird, sollte er natürlich den ganzen Stapel zurückkommen, d. H. Innerhalb der richtigen Rückgabestruktur des Verfahrens. –
Wenn Sie am Ende der Methode einen Rekursionsexit haben, werden Sie erst beendet, wenn jeder rekursive Aufruf den Exitpunkt erreicht. Was bedeutet, alles zu durchlaufen. Stellen Sie sich vor, die exit-Bedingung an den Anfang der rekursiven Methode zu setzen –
Da ich nicht genau weiß, was die Funktion tun soll, könnte dies für diesen speziellen Fall falsch sein, aber im Allgemeinen möchten Sie die Ergebnisse rekursiver Aufrufe zurückgeben. – code11