Wie zu vermeiden stack-überlauf einer rekursiven Funktion?

Zum Beispiel, wenn wir traversaling ein ziemlich großer Baum, der durch die folgende Funktion ist es möglich, dass wir, um stack-überlauf.

void inorder(node* n)
{
  if(n == null) return;
  inorder(n->l);
  n->print();
  inorder(n->r); 
}

Wie eine Bedingung hinzufügen, oder etwas in der Funktion zu verhindern, dass ein solcher überlauf passiert?

  • Wie groß ist der Baum?
  • Das ist nicht wirklich eine Frage, die Sie sollten sorgen zu machen, es sei denn, Sie sind der Umgang mit einige ziemlich große Bäume.
  • Sein Vorschlag wäre, zu senden, extra param counter es zu verfolgen.
  • Dies ist nur ein Problem wenn Ihr Baum ist wirklich tief. Wenn das der Fall ist, die Sie haben, möchten Sie vielleicht zu prüfen, das umwandeln Ihrer rekursive Funktion, um eine nicht-rekursive einer.
  • Ist es ein binärer such-Baum, oder ist es nur ein Baum (z.B. ein azyklischer graph mit nicht mehr als zwei ausgehende Kanten und eine eingehende Kante)?
InformationsquelleAutor Deqing | 2013-07-01
Schreibe einen Kommentar