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 n1 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