Die Aufgabe
Aufgabe 10.2
Leonardo Fibonacci hat 1202 die Frage nach der Anzahl an Kaninchenpärchen untersucht. Unter der Annahme, dass im Jahr 1 mit einem Paar begonnen wird, jedes Pärchen vom zweiten Jahr an ein weiteres Pärchen Nachwuchs bekommt und die Kaninchen unendlich lange leben, wie viele Paare gibt es nach n Jahren? Die Populationsgröße f(n) kann in diesem Fall durch die sogenannten Fibonacci-Zahlen rekursiv ausgedrückt werden:
a) Berechnen Sie f(5) und f(10) ohne Zuhilfenahme eines Computers!
b) Ergänzen Sie das in der Datei A10_2.java vorgegebene Java-Programm A10_2 um die rekursive Methode fib derart, dass die Populationsgröße f(n) korrekt ermittelt wird!
Die vorgegebene Datei A10_2.java:
class A10_2 { // Fibonacci-Zahlen rekursiv berechnen // // Fügen Sie die Methode fib hier ein. // public static void main (String[ ] args) { Out.print("Geben Sie eine Ganzzahl n größer oder gleich 0 ein: "); int n = In.readInt(); Out.println(); Out.println("f(" + n + ") = " + fib(n)); Out.println(); }}Die Formel sagt, wie man f(n) bekommt. Für n = 0 und n = 1 steht der Wert direkt da. Für jedes größere n braucht man zwei kleinere Werte: f(n − 1) und f(n − 2). Eine Formel, die auf sich selbst zurückgreift, heißt rekursiv.
In a) werden die Werte von unten nach oben ausgerechnet: f(2), f(3), … bis f(10). In b) soll die Methode fib die Formel wörtlich umsetzen: Sie ruft sich selbst mit kleinerem n auf.
- a) Die Formel lesen.
- a) f(2) bis f(5) ausrechnen.
- a) Weiter bis f(10).
- b) Den Kopf der Methode fib in die Vorlage setzen.
- b) Die Basisfälle n = 0 und n = 1.
- b) Der Rekursionsfall.
- b) Der Ablauf für fib(4).
- b) Testläufe mit n = 5 und n = 10.
- Ergänzung: warum fib für großes n langsam wird.