Kurs:Algorithmen und Datenstrukturen/Vorlesung/Auswertung von rekursiven Funktionen

Aus testwiki
Version vom 6. April 2022, 23:09 Uhr von 62.154.241.132 (Diskussion) (Auswertung rekursive Funktionsdefinition)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Vorlage:Navigationsleiste/Algorithmen und Datenstrukturen

Auswertung rekursiver Funktionen

In diesem Kapitel wird die Auswertung rekursiver Funktionen behandelt.

Erweiterung der Funktionsdefinition

  • Erweiterung der Definition von Termen
  • Neu: Aufrufe definierter Funktionen sind Terme
  • Eine Funktionsdefinition f heißt rekursiv, wenn direkt oder indirekt (über andere Funktionen) ein Funktionsaufruf f(...)in ihrer Definition auftritt.


Gegeben ist die folgende Funktion:

f(x,y):=ifg(x,y)thenh(x+y)elseh(xy)

g(x,y):=(x==y)odd(y)

h(x):=j(x+1)*j(x1)

j(x):=2x3


Die Auswertung dieser Funktion lautet:

f(1,2)ifg(1,2)thenh(1+2)elseh(12)

if1==2odd(2)thenh(1+2)elseh(12)
if1==2falsethenh(1+2)elseh(12)
iffalsefalsethenh(1+2)elseh(12)
iffalsethenh(1+2)elseh(12)
h(12)
h(1)
j(1+1)*j(11)
j(0)*j(11)
j(0)*j(2)
(2*03)*j(2)
(3)*(7)
21

Auswertung rekursive Funktionsdefinition

Gegeben ist folgende rekursive Funktion:

f(x,y):=ifx=0thenyelse(

ifx>0thenf(x1,y)+1
elsef(x,y))


Die Auswertung dieser Funktion lautet:

f(0,y)yfueralley Hier greift die erste Zeile der Funktionsdefinition. Da x=0 ist nehmen wir y


f(1,y)f(0,y)+1y+1 Hier greift die zweite Zeile der Funktionsdefinition. Da x>0 ist haben wir f(1-1,y)+1. Da x nach diesem Schritt null ist, greift nun die erste Zeile und wir erhalten y+1.


f(2,y)f(1,y)+1(y+1)+1y+2 Hier greift ebenfalls die zweite Zeile der Funktionsdefinition. Da x>0 ist haben wir f(2-1,y)+1. Anschließend wenden wir noch einmal die zweite Zeile an, da x immer noch größer ist als null und wir erhalten f(1-1,y+1)+1. Da x nun null ist greift die erste Zeile der Funktionsdefinition und wir erhalten y+2.

...

Hier lässt sich bereits abschätzen, dass das Ergebnis der Funktion immer weiter hochgezählt wird und es lässt sich allgemein sagen:

f(n,y)y+nfuerallenint,n>0


Ist unser x negativ, entwickelt sich die Auswertung wie folgt:

f(1,y)f(1,y)(y+1)y1 Hier greift die dritte Zeile der Funktionsdefinition. Da x<0 ist werden die Vorzeichen umgekehrt. Nun, da x=1 ist, greift die zweite Zeile und wir erhalten -f(1-1,-y)+1. Da x nun null ist greift wieder die erste Zeile und wir erhalten y-1.


f(2,y)f(2,y)f(1,y)+1(y+2)y2

...

Auch hier lässt sich bereits abschätzen, wie sich die Funktion einwickelt und es lässt sich allgemein sagen:

f(x,y)x+yfuerallex,yint

Definiertheit

Gegeben ist folgender Algorithmus:

f(x):=ifx==0then0elsef(x1)

Auf welchen Eingaben ist der Algorithmus definiert?

Auswertung:

f(0)0
f(1)f(0)0
f(2)f(1)f(0)0
f(x)0xint,x>0
f(1)f(2)... Diese Auswertung terminiert nicht!

Somit gilt:

f(x):={0fallsx0sonst

Literatur

Da die Vorlesungsinhalte auf dem Buch Algorithmen und Datenstrukturen: Eine Einführung mit Java von Gunter Saake und Kai-Uwe Sattler aufbauen, empfiehlt sich dieses Buch um das hier vorgestellte Wissen zu vertiefen. Die auf dieser Seite behandelten Inhalte sind in Kapitel 3.2.4 zu finden.


R-0 Discussion R-3