Programmier-Wettbewerb Wochenaufgabe 04 Start: 24.08.2016 Ende: 07.09.2016 Thema: Rekursion Theoretische Antworten können als Word-, PDF- oder in Form von Kommentaren in der Java-Datei abgegeben werden. Heutiges Thema ist der tiefere Umgang mit Methoden und Funktionen. Speziell beschäftigen wir uns mit der Rekursion. Als Rekursion verstehen wir eine Technik, bei der wir eine Funktion so schreiben, dass sie sich selbst so lange aufruft, bis eine bestimmte Abbruch-Bedingung erreicht wurde. Also zusammengefasst: Eine Funktion heißt rekursiv, wenn sie über eine Eingabevariable verfügt, nach deren Überprüfung die Funktion entweder mit veränderter Eingabe wieder aufgerufen wird, oder die Funktion durch die eine Rückgabe beendet wird. Rekursive Funktionen verwenden normalerweise keine Schleifen. Eine Funktion, die nicht-rekursiv ist und mit Schleifen arbeitet, heißt iterativ. Aufgabe: (rekursion.java) [10 + 30 + 10 + 20 + 30 Punkte] [100 Punkte] a) Lege eine Funktion „fakultaet“ an, die zu einer eingegebenen natürlichen Zahl die zugehörige Fakultät berechnet und ausgibt. Definition: Die Fakultät einer natürlichen Zahl n ist das Produkt aller Zahlen, die kleiner gleich n sind und wird mit n! gekennzeichnet. Beispiel: 4! = 4 * 3 * 2 * 1 = 24 Die Funktion soll nicht rekursiv sein. b) Lege eine Funktion „fakultaet_rekursiv“ an, die die selbe Aufgabe rekursiv löst. Gehen wir dabei folgendermaßen vor: - Die Funktion hat die Eingabevariable n, eine natürliche Zahl. - Die Funktion hat eine Abfrage, ob n kleiner als 1 ist. - Wenn n kleiner als 1 ist, so soll die Zahl 1 zurückgegeben werden. [return 1] - Anderenfalls soll das Produkt aus n und dem Ergebnis der selbigen Funktion mit Eingabe (n-1) zurückgegeben werden. [return n * fakultaet_rekursiv(n-1)] Die Funktion sollte nun das selbe berechnen. c) Nenne Vorteile für die Nutzung von rekursiven Funktionen. d) Schreibe eine Funktion „fibonacci“, die die Fibonacci-Zahlen berechnen und ausgeben sollen. Definition: Fibonacci-Zahlen Die Fibonacci-Zahlen sind eine Zahlenfolge, die nach der Definition der ersten Zahlen immer aus der Summe zweier voriger Fibonacci-Zahlen berechnet wird. f0 := 0 f1 := 1 f2 = f0 + f1 = 0 + 1 = 1 f3 = f2 + f1 = 1 + 1 = 2 f4 = f3 + f2 = 2 + 1 = 3 f5 = f4 + f3 = 3 + 2 = 5 usw… PW Programmier-Wettbewerb Die Funktion soll iterativ sein, also mit Schleifen. Dazu soll die Eingabe eine natürliche Zahl sein, die angibt, wie viele Fibonacci-Zahlen bestimmt werden sollen. e) Ohne Hilfe: Schreibe die Funktion „fibonacci_rekursiv“. Tipp: return fibonacci_rekursiv(n-1) + fibonacci_rekursiv(n-2); PW