Читать книгу Algorithmen und Datenstrukturen - Gunter Saake - Страница 69
Beispiel 3.3 Erweiterte Funktionsdefinition
ОглавлениеAls Beispiel für eine derartig erweiterte Funktionsdefinition betrachten wird die folgenden vier Definitionen:
f(x, y) | = | if g(x, y) then h(x + y) else h(x − y) fi |
g(x, y) | = | (x = y) ∨ odd(y) |
h(x) | = | j(x + 1) · j(x − 1) |
j(x) | = | 2x − 3 |
Die Funktion h ruft die Funktion j zweimal auf. Ein Beispiel für die Auswertung derartiger erweiterter Terme zeigt der Aufruf f (1, 2):
f(1, 2) | if g(1, 2) then h(1 + 2) else h(1 − 2) fi | |
if 1 = 2 ∨ odd(2) then h(1 + 2) else h(1 − 2) fi | ||
if 1 = 2 ∨ false then h(1 + 2) else h(1 − 2) fi | ||
if false ∨ false then h(1 + 2) else h(1 − 2) fi | ||
if false then h(1 + 2) else h(1 − 2) fi | ||
h(1 − 2) | ||
h(−1) | ||
j(−1 + 1) · j(−1− 1) | ||
j(0) · j(−1− 1) | ||
j(0) · j(−2) | ||
(2 · 0− 3) · j(−2) | ||
* | (−3) · (−7) | |
21 |
Die Auswertung erfolgt dadurch, dass jeweils ein Funktionsaufruf durch den ihn definierenden Term ersetzt wird.
Mit der abkürzenden Notation * bezeichnen wir die konsekutive Ausführung mehrerer elementarer Termauswertungsschritte.
Eine Funktionsdefinition f heißt rekursiv, wenn direkt (oder indirekt über andere Funktionen) ein Funktionsaufruf f(..) in ihrer Definition auftritt.