FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Rekursionsarten

Rekursionsarten 2002-02-16 13:28
Spacelord
Ich habe mal ne Frage zu den verschiedenen Rekursionsarten. Es gibt ja linear rekursive, baumrekursive und endrekursive. Und eine linear rekursive kann auch zu gleich endrekuriv sein, oder? Kann eine baumrekursive auch endrekursiv sein?

Dann habe ich in SICP diesbezüglich auch was von "Iteration" gelesen. Das sieht für mich endrekursiv aus, oder hab ich da was falsch verstanden?

Weiß jemand, ob und wo genaue Definitionen und Erkennungsmerkmale zu den Rekursionsarten im Skript stehen?

Re: Rekursionsarten 2002-02-16 15:42
Zaphod
Ich habe mal ne Frage zu den verschiedenen Rekursionsarten. Es gibt ja linear rekursive, baumrekursive und endrekursive. Und eine linear rekursive kann auch zu gleich endrekuriv sein, oder? Kann eine baumrekursive auch endrekursiv sein?
Bei einer linearen Rekursion gibt es dieses rekursive Nachklappern, welches man bei der endrekursiven Variante gerade vermeiden will. Daher glaube ich nicht, dass das gleich sein kann. Eine Baumrekursion enthält mehrfache linear rekursive Teile in einem Aufruf (innerhalb einer Bedingung). Damit ist sie gerde nicht mehr linear.

Iteration entspricht Endrekursion

Re: Rekursionsarten 2002-02-17 13:10
Anonymer User
Ich habe versucht die Rekursionen (so wie ich das Skript interpetiere) zusammenzufassen:

Lineare Rekursion - Skript Seite 166
Der rekursive Aufruf wird in jeder Fallunterscheidung nur einmal verwendet.

Endrekursion - Skript 179
Das Ergebnis der Rekursion muss nicht mehr verknüpft/ weitergegeben werden.

Baumrekursion - Seite 180
Wenn eine Fallunterscheidung zu mehr als einem rekursiven Aufruf führen.


Re: Rekursionsarten 2002-02-17 14:38
Faleiro
Endrek.: Ist das nicht ein Spezialfall der linearen Rekursion? Würde ich so sehen. Jedenfalls trifft das Kriterium, das du für lin. Rek. gegeben hattest, auch für Endrekursion zu.

Re: Rekursionsarten 2002-02-17 17:52
Spacelord
Man kann doch jede linear rekursive Funktion endrekursiv machen, oder? Aus Performancegründen muss das ja eigentlich auch eine Voraussetzung sein …
Wenn ich mir jedoch zum Beispiel die Definition von filter im Skript (Slide 187) oder in den tools ansehe, dann ist die doch nicht endrekursiv. Dann wäre doch jede Funktion, die darauf aufbaut auch nicht endrekursiv und damit auch ineffizient. Oder macht der Kompiler die automatisch endrekursiv? Dann bräuchte man sich ja gar nicht mehr mit diesem Thema zu beschäftigen …

Re: Rekursionsarten 2002-02-17 18:17
Anonymer User
high

Lineare Rekursion - Skript Seite 166
Der rekursive Aufruf wird in jeder Fallunterscheidung nur einmal verwendet.

Endrekursion - Skript 179
Das Ergebnis der Rekursion muss nicht mehr verknüpft/ weitergegeben werden.

Baumrekursion - Seite 180
Wenn eine Fallunterscheidung zu mehr als einem rekursiven Aufruf führen.

lineare Rek.

das ergebnis der rek wird weiterverknuepft

bsp

(else
(cons (car xs)(blah x (cdr xs)

endrek

das ergebnis der rek wird nicht verknuepft.

bsp

(else
(blech (cdr xs) x)

baumrek

das ergebnis aus 2 rekursionen wird miteinander verknuepft

bsp
fibonachi zahlen

(+ (fib (- 1 n))
(fib (- 2 n)))

verschraenkte rek

die rekursionen rufen sich gegenseitig auf

bsp
ackermann funktion (acker x y)

(else
(a (- x 1)(a x (- y 1)))

christian

Re: Rekursionsarten 2002-02-17 18:45
Slater
das filter als standartfunktion in tools.scm nicht endrekursiv ist, ist eine frechheit,
alle ab sofort meine verwenden [img]http://images.rapidforum.com/images/i7.gif[/img]:

(define (filter_acc p? xs ys)
(cond ((null? xs) (reverse ys))
((p? (car xs)) (filter_acc p? (cdr xs) (cons (car xs) ys)))
(else (filter_acc p? (cdr xs) ys))))

(define (endfilter p? xs) (filter_acc p? xs '()))

@spacelord: wenn man eine funktion als linear oder sonstwie rekursiv einordnet, müssten die darin verwendeten funktionen egal sein, es geht wohl nur um die struktur der funktion selber,
wer weiss schon, wie plus und minus genau definiert sind, hoffentlich effizient…,

Re: Rekursionsarten 2002-02-17 21:48
Faleiro
Lustig finde ich, daß wir im Scheme-Teil lernen und definieren, was Rekursion ist, nachdem in Prolog dieses Wissen (naja, die Fähigkeit zur Anwendung) schon vorausgesetzt wurde.