Frage

Ist die Verwendung von Rekursion akzeptabel, wenn VC++-Code in Produktionsqualität geschrieben wird?Warum oder warum nicht?

War es hilfreich?

Lösung

Gibt es eine Möglichkeit zu bestimmen, an welchem ​​Punkt ein Stapelüberlauf auftreten würde?

Nicht wirklich.Ein Stapelüberlauf tritt auf, wenn der Stapelplatz erschöpft ist – jedoch ...

  • Die anfängliche Stapelgröße kann programmgesteuert geändert werden und kann je nach Betriebssystem/Compiler usw. standardmäßig auf unterschiedliche Werte eingestellt werden
  • Wie viel davon bereits aufgebraucht ist, hängt davon ab, was Ihre App (und die Bibliotheken, die Ihre App verwendet) zuvor getan hat – das lässt sich oft nicht vorhersagen
  • Wie viel Stapel jeder Aufruf benötigt, hängt davon ab, was Sie in Ihrer Funktion tun.Wenn Sie beispielsweise nur eine Ganzzahl auf dem Stapel zuweisen, können Sie möglicherweise enorm oft rekursiv sein, aber wenn Sie einen 200-KByte-Puffer auf dem Stapel zuweisen, ist dies nicht so oft der Fall.

Das einzige Mal, dass ich jemals auf einen gestoßen bin, war in einer Endlosschleife oder bei Verwendung des oben genannten 200-KByte-Puffers.

Ich finde es weitaus besser, wenn meine App einfach abstürzt, als dass sie mit 100 % CPU-Auslastung in einer Endlosschleife läuft und gewaltsam beendet werden muss (dies ist eine richtige PITA auf einem Remote-Server über eine schlechte Verbindung, da Windows kein SSH hat).

Eine grobe Richtlinie:Glauben Sie, dass Ihre rekursive Funktion sich wahrscheinlich mehr als sagen wir mal 10.000 Mal hintereinander aufruft?Oder machen Sie etwas Dummes wie die Zuweisung von 200.000 Puffern auf dem Stapel?

Wenn ja, machen Sie sich darüber Sorgen.
Wenn nein, machen Sie mit wichtigeren Dingen weiter.

Andere Tipps

Ja.Aber niemals in totem Code.Das wäre albern.

Klar – z.B.Wenn Sie eine Baumstruktur durchlaufen möchten, was würden Sie sonst noch verwenden?

Vielleicht möchten Sie so etwas wie eine maximale Tiefe haben, um sicherzustellen, dass Sie keine Endlosschleife schreiben.(falls dies in Ihrem Beispiel Sinn macht)

Gibt es eine Möglichkeit, zu bestimmen, an welchem ​​Punkt ich auf einen Stapelüberlauf stoßen würde?

Hängt davon ab, wie tief Sie gehen und wie groß die tatsächliche Rekursion ist.Ich nehme an, Sie verstehen, was Rekursion bewirkt?

Rekursion ist fast unerlässlich, um Dateistrukturen wie Ordner/Verzeichnisse zu durchlaufen.

Das Durchlaufen einer baumähnlichen Struktur ist sehr einfach, wenn Rekursion verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top