ist eine vielfache Rekursion in Python üblich?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dor_neue
User
Beiträge: 74
Registriert: Montag 16. Juni 2008, 18:51

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...
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Python ist nicht dafür optimiert, daher sollte man andere Lösungsmöglichkeiten bevorzugen, ja.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wobei es einfach Strukturen gibt, die nach Rekursion schreien. Stichwort Baumtraversierung. Da wäre es sicherlich unschöner und aufwendiger, einen rein iterativen Weg zu wählen.
BlackJack

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.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Iirc ist doch beides semi-entscheidbar und daher im Umkehrschluss auch gleich komplex, wie BlackJack es ja schon sagte.
Es müsste gleich komplex sein, denn Tail-Recursion-Optimization bedeutet ja auch nur, dass aus Funktionsaufrufen automatisiert Schleifen gemacht werden.

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Hyperion hat geschrieben:Weiß jemand, ob es bei der statischen Programmanalyse ein Unterschied macht, ob ich eine Schleife oder eine Rekursion verifiziere?
Iteration ist ein Sonderfall der Rekursion, AFAIK gibt es keinen Unterschied.

Stefan
Antworten