Stilfrage: Iteration in Rekursion ?
-
Zeugt es von schlechtem Stil, wenn innerhalb einer rekursiven Funktion eine for-Schleife aufgerufen wird oder ist dies durchaus üblich?
-
Durchaus üblich.
Beispiel: Quicksort - Implementierung.
-
Man sollte es vermeiden, falls möglich, ist aber keine Stilfrage.
allgemein:
http://www.educeth.ch/informatik/leitprog/rekursion/docs/rekursion.pdf
-
Erhard Henkes schrieb:
Man sollte es vermeiden, falls möglich, ist aber keine Stilfrage.
Begründung?
-
Also ich glaube, wir haben vor ca 2 Jahren mal eine tiefgreifende Diskussion zu dem Thema gehabt..
Rekursion ist leider nicht besonders beliebt - was ich schade finde - aber zur Frage : Es kommt auf die schleife an. Wenn diese Schleife nichts mit der eigentlichen Rekursion zu tun hat - oder diese ersetzt, ist es durchaus kein Problem. Nur ist es etwas sinnlos, wenn die Schleife durch etwas Programmierung in die Rekursion einfließen würde.
-
Erhard Henkes schrieb:
Man sollte es vermeiden, falls möglich, ist aber keine Stilfrage.
allgemein:
http://www.educeth.ch/informatik/leitprog/rekursion/docs/rekursion.pdfich würde sagen das hat mit dem Einsatzgebiet zu tun. Es wäre unsinnig als for-Schleifenersatz ne rekursion einzubauen aber versuch doch mal nen Parser mit einer definierten Gramatik zu bauen ohne rekursion.
-
Online schrieb:
versuch doch mal nen Parser mit einer definierten Gramatik zu bauen ohne rekursion.
yacc
-
Superbeitrag...4 Buchstaben sind auch eine Zeichenkette ja...stimmt
glich von vorne weg...ich hab nicht gesagt das es nicht möglich ist
dassoll heißen ist schlecht, umständlich, zeitaufreibend usw...
-
Online schrieb:
Superbeitrag...4 Buchstaben sind auch eine Zeichenkette ja...stimmt
glich von vorne weg...ich hab nicht gesagt das es nicht möglich ist
dassoll heißen ist schlecht, umständlich, zeitaufreibend usw...
reg dich ab: YACC ist ein Compilertool. Sogar ziemlich bekannt
http://dinosaur.compilertools.net/
http://www.epaperpress.com/lexandyacc/
...
-
kingruedi schrieb:
YACC ist ein Compilertool.
Eins ohne Rekursion, möchte ich noch hinzufügen. Aber ich dachte eigentlich, jemand der Parserbau als Argument anführt wüßte zumindest was yacc ist
-
Seinem Beitrag zufolge denke ich er weiß, was yacc ist.
Nur die Existenz muß halt nich bedeuten, daß es auch "schön" bzw. praktisch ist...
-
Dann hätte er nicht so scharf reagiert.
-
Bashar schrieb:
Dann hätte er nicht so scharf reagiert.
ich hab nicht scharf reagiert...mir ist sehr wohl klar das es auch ohne rekursion geht, jedes rekursive Problem läßt sich auch interativ lösen. Die andere Frage ist, was bringt es?
Rekursiv ist viel eleganter und vor allem meistens extrem kürzer.übrigens hab ich auch was von einer Grammatik geschrieben. Terminalsymbol/Nichtterminalsymbol...also wenn sich da nicht die rekursion anbietet.
-
Online schrieb:
Die andere Frage ist, was bringt es?
Performanz u.U.
-
@Online
YACC erzeugt dir aus einer gegebenen Gramatik einen Parser der nicht rekursiv ist. Das ist der ganze Punkt an Bashars "4 Buchstaben"Und das geht sicher schneller, als sich die Gramatik per Hand in eine Rekursion umzuformen
-
Online schrieb:
Rekursiv ist viel eleganter und vor allem meistens extrem kürzer.
Rekursion birgt viele Gefahren. In vielen Fällen macht es eben doch Sinn die iterative Lösung zu bevorzugen, auch wenn sie nicht die Eleganteste ist.
-
MaSTaH schrieb:
Rekursion birgt viele Gefahren.
Dann nenn mal 2
-
- Endlosrekursion weil man zu dumm war korrekte Abbruchbedingen einzuführen
- Stack-Overflow weil die Funktion zu oft aufgerufen wirdMfG SideWinder
-
SideWinder schrieb:
- Endlosrekursion weil man zu dumm war korrekte Abbruchbedingen einzuführen
Das gibt es ja auch beim iterieren und sollte man spätestens beim testen merken.
-
kingruedi schrieb:
Das gibt es ja auch beim iterieren
Hat ja keiner anders behauptet
MfG SideWinder