Rekursion in Java -In 11, Blatt 1

Werbung
Rekursion in Java -In 11, Blatt 1
{Auf11_Rekursion-Java.odt}
Aufgabe 1
1.1
Formuliere eine rekursive Methode fib(..) zur Berechnung der Fibonaccischen Zahlen
1.2
Gib die Aufrufschemata für fib(4) und fib(5) an
1.3
Entwickle eine rekursive Formel für die Rekursionstiefe.
1.4
Ein Java-Programm soll von i = 2 bis n die Werte i, fib(i), fib(i)/fib(i-1) ausgeben.
Aufgabe 2
Formuliere eine rekursive Methode zur Berechnung der Summe der ersten n natürlichen Zahlen:
s(n) = 1 + 2 + ..... + n
Aufgabe 3
int qsum( int x) {
if (x > 1)
return x*x + qsum( x – 1);
else return 1;
}
Erstelle das Aufrufschema einschließlich Rückgabewerte für qsum (5)
Aufgabe 4
class Addition {
int add(int x, int y) {
if (y==0) return(x); //Abbruchbedingung
return( 1 + add(x,y-1));
}
}
Gib für folgende Belegungen die Aufrufschemata von add(x, y) an:
(x, y ) = (5, 0); (5, 3); (3, 5); (0, 3)
Aufgabe 5
int szahl( int x) {
if (x > 1)
return x + szahl( x – 2);
else return 1;
}
Erstelle das Aufrufschemata einschließlich Rückgabewerte für szahl(5) und szahl(6) .
Aufgabe 6
Gegeben ist die Methode void umgekehrt( String s), welche einen String beliebiger Länge liest.
void umgekehrt( String s) {
char z;
int laenge = s.length();
if (laenge >0) {
z = s.charAt(0);
//System.out.print(z);
umgekehrt(s.substring(1,laenge));
System.out.print(z);
} // if
}
© A. Wagner, Seite 1
Rekursion in Java -In 11, Blatt 2
6.1
6.1
Benenne den Rekursionsanfang.
Erstelle eine Tabelle für s = RETUP
z
laenge > 0
Rek.-Tiefe
R
5>0
0
6.2
Wie ändert sich die Ausgabe, wenn der Kommentar „deaktiviert“ wird?
(laenge = 5)
Ausgabe
Aufgabe 7
Schreibe eine Methode int quersumme(int zahl), welche die Quersumme von zahl rekursiv
berechnet. Nimm die vorangehende Aufgabe als Denkanstoß!
Aufgabe 8
Schreibe eine rekursive Methode int pas(int n, int k) zur Berechnung des Pascalschen Dreiecks
(n ≥ 0 ist die Zeilennummer, k nummeriert die Zahlen innerhalb einer Zeile: 0 ≤ k ≤ n ).
Aufgabe 9 Türme von Hanoi
8.1
Berechne die Laufzeiten für n =20 (21; 22; 23; 24; 25; 64), wenn pro Sekunde 10000
(10 Millionen) Züge bearbeitet werden können.
8.2
Gib das Aufrufschema von
void versetzeTurm(int n, String quelle, String ziel, String hilf )
für n = 4 (n = 5) an.
Aufgabe 10 Anstoßen von Gläsern: Wie oft klingen die Gläser, wenn sich n Personen jeweils mit
a n−1 n−1 n1
ihren Gläsern zuprosten? Erläutere die Formel a n =
0
n=1
{
Ein Linienalgorithmus
Der folgende Linienalgorithmus berechnet die Pixel zwischen P1(x1 | y1) und P2(x2 | y2).
Er berechnet rekursiv die zwischen P1 und P2 liegenden diskreten Pixelpositionen.
void linie (x1, y1, x2, y2) {
if ( (x1, y1) und (x2, y2) benachbart ) // was heißt benachbart?
zeichne die Punkte (x1, y1) und (x2, y2)
else {
xm = (x1 + x2)/2; ym = (y1 + y2)/2;
//ganzzahlige Mitten
// die rekursiven Aufrufe:
linie(x1, y1, xm, ym);
linie(xm, ym, x2, y2);
} // else
} // linie
Rekursion-2, Java /In 11-G8
Aufgabe
Gib den Aufrufbaum an und zeichne die Pixel in ein Koordinatensystem ein:
(a) P1(0 | 0), P2(7 | 5)
(b) P1(1 | 1), P2(7 | 8)
(c) P1(1 | 1), P2(9 | 7)
Ermittle eine Formel für die Schrittzahl S(n)
11
10
9
8
7
6
5
4
3
2
1
0
0 1 2 3 4 5 6 7 8
9 10 11
0 1 2 3 4 5 6 7 8
9 10 11
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
0 1 2 3 4 5 6 7 8
9 10 11
Herunterladen