Als ich C/C++ gelernt habe wurde uns auf die Finger gehauen, wenn wir die Funktionen aus sich selbst aufgerufen haben. "Das kann man nicht wirklich kontrollieren" wurde uns dabei eingehämmert...
Nun seh ich das hier im How to Think Like a Computer Scientist im Kaptiel 4.9
http://www.rg16.asn-wien.ac.at/~python/ ... /kap04.htm
Ist es wirklich so üblich das zu nutzen oer dann doch lieber mit FOR-Schleife? Weil dieser Selbstaufruf kommt mir nicht wirklich vorteilhaft vor...
ist eine vielfache Rekursion in Python üblich?
Und die Begründung "Das kann man nicht wirklich kontrollieren" ist Blödsinn. Rekursion ist genau so kontrollierbar oder unkontrollierbar wie iterative Schleifen. Man sollte den Leuten in einer iterativen Programmiersprache auf die Finger hauen, wenn sie unnötigerweise Rekursion als einfachen Schleifenersatz oder "Sprungbefehl" missbrauchen. Aber da wo eine rekursive Lösung eleganter, einfacher, und verständlicher ist, sollte man auch rekursive Funktionen programmieren. Auch in C und C++. Baumtraversierung wurde als Beispiel ja schon genannt.
Das Python dafür nicht optimiert ist, heißt nicht, daß man eine durchaus anerkannte und nützliche Technik nicht verwenden darf/sollte. Man muß dabei halt nur den Umfang der ganzen Geschichte (Rekursionstiefe,...) im Auge behalten.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Weiß jemand, ob es bei der statischen Programmanalyse ein Unterschied macht, ob ich eine Schleife oder eine Rekursion verifiziere? Iirc ist doch beides semi-entscheidbar und daher im Umkehrschluss auch gleich komplex, wie BlackJack es ja schon sagte.BlackJack hat geschrieben:Und die Begründung "Das kann man nicht wirklich kontrollieren" ist Blödsinn. Rekursion ist genau so kontrollierbar oder unkontrollierbar wie iterative Schleifen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Es müsste gleich komplex sein, denn Tail-Recursion-Optimization bedeutet ja auch nur, dass aus Funktionsaufrufen automatisiert Schleifen gemacht werden.Hyperion hat geschrieben:Iirc ist doch beides semi-entscheidbar und daher im Umkehrschluss auch gleich komplex, wie BlackJack es ja schon sagte.
Eigentlich ist zu dem Thema nichts zu sagen, was nicht schon gesagt wurde, aber ich merke dennoch etwas an. Für die üblichen Aufgaben verwendet man die üblichen Werkzeuge der Sprache. In hauptsächlich iterativen Programmiersprachen ist das die Schleife. In hauptsächlich funktionalen Sprache ist das oft die Rekursion. Man sollte nicht das Problem in eine bestimmte Lösung zwingen versuchen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Iteration ist ein Sonderfall der Rekursion, AFAIK gibt es keinen Unterschied.Hyperion hat geschrieben:Weiß jemand, ob es bei der statischen Programmanalyse ein Unterschied macht, ob ich eine Schleife oder eine Rekursion verifiziere?
Stefan