Ubungen zum Repetitorium Informatik 1

Werbung
Institut fur Informatik
der Universitat Munchen
Dr. Jan Johannsen
Jan Homann
WS 2007/08
8. Januar 2008

Ubungen
zum Repetitorium Informatik 1
Blatt 8
Aufgabe H-19 (6 Punkte): Die Addition zweier ganzer Zahlen kann wie folgt rekursiv
in SML implementiert werden:
val rec add = fn (a,0) => a
| (a,b) => add (a+1,b-1);
(a) Geben Sie ein Paar (a,b) von ganzen Zahlen an fur das add(a,b) nicht terminiert.
Begrunden Sie Ihre Antwort.
(b) Beweisen Sie, dass der Aufruf add(a,b) fur alle Zahlen a, b ≥ 0 terminiert.
(c) Beweisen Sie, die Korrektheit von add fur naturliche Zahlen. Also zeigen Sie, dass
fur alle a, b ≥ 0 gilt: add(a,b) = a+b.
Geben Sie Ihre Losung als Textdatei mit dem Namen h-19.sml ab.
Aufgabe H-20 (6 Punkte): Gegeben ist die SML-Funktion recursion: ’a -> (int
* ’a -> ’a) -> int -> ’a, die Sie in der Datei
auf der Homepage nden.
8-2.sml
fun recursion base step = let
fun g 0 = base
| g n = step(n,g(n-1));
in
g
end;
val f1 = recursion 1 op*;
val f2 = recursion 1 (fn (a,b) => 2*b);
val f3 = recursion [] (fn (a,b) => b@[a-1]);
val f4 = fn f => recursion [] (fn (a,b) => b@[f (a-1)]);
(a) Um welche Funktionen handelt es sich bei f1, . . ., f4? (Hinweis: Die Funktionen
sind bekannt oder lassen sich einfach beschreiben.)
(b) Beschreiben Sie kurz das Ergebnis, das der Funktionsaufruf recursion base step
liefert. Erlautern Sie insbesondere welche Rolle die Argumente base und step dabei
spielen.
(c) Die Funktion g, die von einem Aufruf recursion base step berechnet wird ist
ein rekursive Funktion, die nicht
ist. Verbessern Sie die Funktion
recursion, indem Sie eine Funktion recursion2: ’a -> (int * ’a -> ’a) ->
int -> ’a implementieren, die ein solches g berechnet, das endrekursiv ist.
endrekursiv
Geben Sie Ihre Losung als Textdatei mit dem Namen h-20.sml ab.
Aufgabe P-18: Die folgende rekursive Funktion f sei auf Paaren von nat
urlichen Zahlen
deniert wie folgt:
f(n,m) = if n=m then n
n+m
else f(n,b n+m
2 c) * f(d 2 e,m)
Zeigen Sie, dass f fur alle Eingaben (n, m) mit n ≤ m terminiert.
Abgabe der Hausaufgaben u
ber UniWorx bis spatestens Dienstag, 15.01.2008, 14
Uhr. Besprechung am Dienstag, 15.01.2008.
Herunterladen