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.
Mich plagt im Moment die genauen Unterschiede zwischen iterative Programmierart und rekursive Programmierart in Python. Ich habe jetzt schon mindestens 5 Erklärungen dazu durchgelesen und kenne nun alle Vor- und Nachteile. Aber wie genau jetzt eine iterative Funktion aussieht oder wie das gleiche Programm rekursiv aussieht, ist mir einfach nicht klar.
Immer wieder komme ich ins Zweifeln, wenn ich denke, ich hätte es endlich verstanden.
def fibo_iterativ(n):
a = b = 1
for k in xrange(n-1):
a, b = a+b, a
return b
def fibo_rekursiv(n):
if n>2:
return fibo_rekursiv(n-1)+fibo_rekursiv(n-2)
else:
return 1
Rekursion ist eine spezielle Form der Iteration und sollte in Python weitestgehend vermieden werden, da Endrekursion nicht zu iteration optimiert wird. Desweiteren gibt es in Python ein Rekursionslimit dass bei 1000 liegt, kann man erhöhen sollte man aber nicht unbedingt.
Und was sind die Vorteile von rekursiven Funktionen gegenüber iterativen? Mir wär noch kein Vorteil eingefallen, ausser vielleicht in manchen Fällen kompakterer code.
ichbinsisyphos hat geschrieben:Und was sind die Vorteile von rekursiven Funktionen gegenüber iterativen? Mir wär noch kein Vorteil eingefallen, ausser vielleicht in manchen Fällen kompakterer code.
Korrekt. Und manchmal einfach mehr Eleganz.
Gelegentlich lässt sich auch die Idee eines Algorithmus durch die rekursive Umsetzung klarer abbilden.
ichbinsisyphos hat geschrieben:Und was sind die Vorteile von rekursiven Funktionen gegenüber iterativen? Mir wär noch kein Vorteil eingefallen, ausser vielleicht in manchen Fällen kompakterer code.
Neben dem schon beschriebenen gibt es auch Sprachen die gar keine Schleifen haben sondern nur Rekursion bieten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas hat geschrieben:Neben dem schon beschriebenen gibt es auch Sprachen die gar keine Schleifen haben sondern nur Rekursion bieten.
Könntest du ein Beispiel geben?
Scheme. Natürlich kannst du dir Makros ala LOOP wie in Common Lisp bauen, jedoch musst du dann rechnen von anderen Scheme-Programmierern ausgelacht zu werden.
Daher sind auch die verschiedenen map-Funktionen, reduce, filter etc. so praktisch.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Haskell wäre auch ein Beispiel für eine Programmiersprache die "nur" Rekursion bietet.
@derdon: Dein iteratives Beispiel ist aber nur eines weil Du eine ``for``-Schleife drum herum gebastelt hast. Denn das `reduce()` intern eine Schleife und keine Rekursion verwendet ist ein Implementierungsdetail. :-=