gerold hat geschrieben:BlackJack hat geschrieben:@gerold: Bei einer Sprache bzw. Implementierung mit einer Obergrenze für Rekursionsaufrufe und ohne "tail call optimization" ist Rekursion als Ersatz für eine einfache Schleife IMHO die technisch schlechtere Lösung. Das sollte man sich als Lösungsmuster gar nicht erst angewöhnen.
Diese Diskussion wird jetzt ins Lächerliche gezogen.
Finde ich eigentlich gar nicht. Dies ist eine sehr gute Diskussion in der sich die Standpunkte: "verwende Rekursion wenn möglich" (Gerold) und "verwende Rekursion wenn nötig" (BlackJack) gegenüber stehen. Ich muss sagen, dass ich auch eher zu BlackJacks Ansicht tendieren würde - Python ist kein Scheme und ist eben nicht für Rekursion optimiert. Es hat ein Limit und deine Lösung Gerold funktioniert zwar, ist aber bei genauerer Überlegung kein Code den man vorbehaltslos auf andere Situationen übertragen könnte.
Ich habe Rekursion auch als Lösung für Probleme verwendet, die gar nicht zwangsweise Rekursive Lösungen benötigen, aber dann hatte die Rekursion auch ein niedriges, festgelegtes Limit. Für so Einsatzzwecke ist Pythons Rekursion IMHO optimal.
gerold hat geschrieben:Hier geht es nicht um ein paar 1000 rekursive Aufrufe, sondern nur um ein paar wenige.
In dem Code, ja, vielleicht, aber letztendlich sieht man auf dem Horizont einen Punkt (das Rekursionslimit), das dem ein unausweichliches Ende setzt. Wenn jemand das Programm etwas umarbeitet und für einen anderen Einsatzzweck verwendet, kann er durchaus bis zu diesem Limit kommen.
gerold hat geschrieben:So ganz verstehe ich dich nicht. Ich will dem Fragesteller in einem Beispiel gleich mehrere Techniken und Möglichkeiten aufzeigen (Funktionen, Exceptions, Rekursion,...) und du ziehst das in den Dreck. Schreibe lieber ein Beispiel in dem du aufzeigst, wie du es machen würdest und erkläre warum du das so machst. Dann kann jeder selber wählen was er nehmen möchte.
Ich glaube Gerold, dass du dich unnötig gekränkt fühlst. Es war niemandes Absicht dein Programm in den Dreck zu ziehen, ich als Außenstehender habe BlackJacks Kommentar eben als konstruktive Kritik gesehen.
Aber da ich mich jetzt habe reinziehen lassen, muss ich wohl ein Beispiel zusammenschreiben.. Moment.
Edit: Bitteschön, ich habe Gerolds Code nichtrekursiv gemacht und BlackJacks Anmerkung zu den Exceptions auch mitberücksichtigt:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
def get_day():
while True:
retval = raw_input("Tag im Format dd eingeben oder mit STRG+C abbrechen: ")
try:
day = int(retval)
if 1 <= day <= 31:
return day
else:
print "Gib eine Zahl zwischen 1 und 31 ein"
except ValueError:
print "Gib eine Zahl ein."
def main():
print "-" * 60
try:
day = get_day()
print "Tag:", day
except KeyboardInterrupt:
print "abgebrochen"
print "-" * 60
if __name__ == "__main__":
main()
So Gerold, du darfst mich jetzt auch verreißen