A7.2 - Fachbereich Mathematik und Informatik

Werbung
Prof. Dr. M. Sommer
M. Vincon
Praktische Informatik 1, WS 2007/08
Übung 7
A7.1: Rekursionsschemata
(4P)
Geben Sie zu jeder der folgenden rekursiven Definitionen an, welchem Rekursionsschema
(primitiv- rumpf-, linear- oder nichtlinear-rekursiv) sie genügt. Begründen Sie ihre Antwort! (1P)
pro Aufgabenteil.
0
n=0
⎧
a) f 1 ( n ) = ⎨
⎩ f 1 ( n − 1 ) + n sonst
T
n=0
⎧
⎪
b) f 2 ( n ) = ⎨
F
0 < n<7
⎪ f ( n −7 )
sonst
⎩ 2
T
n=1
⎧
⎪
c) f 3 ( n ) = ⎨ f 3 ( n / 2 ) n%2 = 0
⎪ f ( 3 n + 1 ) n%2 = 1
⎩ 3
1
n≤m
⎧
⎪
d) f 4 ( n , m ) = ⎨
n
m=1
⎪ f ( n − 1 , m ) + f ( n − 1 , m − 1 ) sonst
⎩
A7.2: Rekursion: Analyse
(4P)
Gegeben seien folgende Methoden:
void f(int n){
if (n > 1){
if (g(n, n / 2))
System.out.println(n);
f(n – 1);
}
}
boolean g(int n, int m){
if (m > 1)
return ((n % m) > 0) ? g(n, m – 1) : false;
else
return true;
}
a) (2P) Was wird ausgegeben, wenn f mit einer natürlichen Zahl n als Eingabe aufgerufen wird?
b) (2P) Begründen Sie Ihre Antwort!
Seite 1/2
Prof. Dr. M. Sommer
M. Vincon
Praktische Informatik 1, WS 2007/08
A7.3: McCarthy, Potenz-Rechnung
(3P)
a) (2P) Begründen Sie, wieso die mcCarthy-Funktion (siehe Folie 20 in Kapitel 10) terminiert.
b) (1P) Schreiben Sie eine rekursive Java-Methode, die die Potenz xy von zwei Zahlen x und y
berechnet.
A7.4: Entrekursivierung
(4P)
Gegeben Sei die folgende rekursive Methode:
double f(int x, int i, double z)
{
if (i > 0)
{
z *= x;
z = f(x, i-1, z);
z /= i;
}
return z;
}
Dabei wird f als erstes immer in der Form f(x, i, 1) aufgerufen. (Hinweis: Das dritte Argument ist
der Zahlwert 1).
a) (2P) Geben Sie eine äquivalente, nicht-rekursive mathematische Darstellung von f(x, i, 1) an.
b) (2P) Geben Sie eine äquivalente iterative Methode an, die f(x, i, 1) berechnet.
A7.5: Zeichnen von Strecken
(5P)
Betrachten Sie das Gerüst zu dieser Aufgabe, welches von der Vorlesungsseite geladen werden
kann. In dieser Aufgabe wollen wir einen einfachen rekursiven Algorithmus implementieren für
das Zeichnen von geraden Strecken auf einer Fläche. Die Fläche wird dabei durch das
zweidimensionale Array repräsentiert und die Positionen der Punkte durch ganzzahlige Indizes
angesprochen.
a) (1P) Implementieren Sie in der Klasse Punkt die Methode berechneMittelpunkt, die den
Mittelpunkt zwischen this und dem Punkt p2 berechnet und zurückgibt. Achten sie darauf, wie
sie mit nicht ganzzahligen Rechen-Ergebnissen umgehen.
b) (2P) Implementieren Sie die Methode zeichneStrecke, die die Strecke zwischen p1 und p2
rekursiv zeichnen soll. Den Punkten muss dabei gesagt werden, dass sie zu der Strecke bzw.
Linie gehören (indem der entsprechende Wert in dem Array zum Beispiel auf true gesetzt
wird).
c) (2P) Testen Sie ihre Methoden aus Aufgabenteil a.) und b.) (auch mit mehreren Linien).
Implementieren Sie die Methode gibAus zur Ausgabe der Fläche.
Seite 2/2
Herunterladen