Rekursion
-
Nabend zusammen,
ich hab eine eher allgemeine Frage, die wohl nichts direkt mit C++ zu tun hat.
Jedenfalls habe ich desöfteren gesehen, dass Rekursive Funktionen aus normalen Funktionen heraus geöffnet werden.Beispiel:
void find(int value){ find_r(blabla, value); } find r(blabla blabla, int value{ ...Rekursion... }Das "r" im zweiten Funktionsnamen steht für die Rekursion, was wohl unschwer zu erkennen ist... Allerdings frage ich mich was der Sinn dahinter ist! Ich habe gesucht und in keinem Beitrag oder Tutorial über Rekursion etwas gefunden. Ich meine mal gehört zu haben, dass man dadurch "Fehler vermeidet", allerdings ist das eine recht knappe Antwort. Oder ist es einfach nur "guter Programmierstil"? Ich meine übersichtlicher wird mein Programm dadurch absolut nicht...
Danke schon mal im Voraus!
Grüße,
Overflow
-
Das macht man wenn dieser Parameter eigentlich nicht zur Funktion gehört, und nur wegen der Rekursion existiert. (Um Daten in die nächste "Instanz" zu transportieren. z.B. einen depth-counter o.Ä.) Ist dann auch duchaus legitim, allerdings ist rekursion zur Laufzeit im allgemeinen eher zu vermeiden, da meist deutlich langsamer.
-
cooky451 schrieb:
da meist deutlich langsamer.
Nicht, wenn die Funktion tail recursive ist, das kann Compiler in eine iterative Version umwandeln.
-
In der Regel sind rekursive Funktionen zu vermeiden, weil sie deutlich langsamer sein können und Stack-Overflows auftreten können.
Bei Bäumen kann man es gut verwenden, z.B. beim Dateisystem.
Pseudocode:function OrdnerGröße(ordner) for e in ordner größe = 0 if datei(e) größe += dateigröße(e) else größe += OrdnerGröße(e) return größe
-
Genau Bäume sind gerade unser Thema, deswegen bin ich auch darauf gekommen...
Da man anfängt iterativ programmieren zu lernen, bin ich das auch gewohnt. Richtige Rekursion musste ich jetzt zum ersten Mal anwenden, davor nur etwas wie die Fibonacci-Reihe. Etwas ungewöhnlich... aber vielen Dank für die Antworten!