82 lines
2.5 KiB
Java
82 lines
2.5 KiB
Java
class Aufgabe {
|
|
public static void main(String[] args) {
|
|
|
|
// Es gibt zwei Möglichkeiten die Fibunacci-Folge zu erstellen.
|
|
// Dabei werden die ersten zwei Felder immer mit festen Werten definiert.
|
|
// Variante 1: F0 = 0; F1 = 1
|
|
// Variante 2: F0 = 1; F1 = 1
|
|
// Alle Werte danach werden aber immer nach der gleichen Regel erstellt.
|
|
// FN = FN-2 + FN-1
|
|
|
|
System.out.println("Iterativ:");
|
|
iterativ(45);
|
|
|
|
System.out.println("Rekursiv:");
|
|
rekursiv(0, 1, 45);
|
|
}
|
|
|
|
/**
|
|
* Ermitteln der Fibonaccizahlen mit einer iterativen Lösung.
|
|
* @param fields Die Anzahl der Felder welche mit Fibonaccizahlen gefüllt werden sollen.
|
|
*/
|
|
public static void iterativ(int fields) {
|
|
|
|
// Initialisieren der Folge. Die Größe der Folge gibt die Anzahl der Fibonaccizahlen an.
|
|
int[] fibonaccifolge = new int[fields];
|
|
|
|
// Alle Felder der Folge initialisieren.
|
|
// Die ersten zwei Zahlen müssen dabei fest definiert werden.
|
|
// Die Felder werden dabei nach Variante 1 definiert.
|
|
for(int i = 0; i < fibonaccifolge.length; i++) {
|
|
if (i == 0 || i == 1) {
|
|
fibonaccifolge[i] = i;
|
|
} else {
|
|
fibonaccifolge[i] = 0;
|
|
}
|
|
}
|
|
|
|
// Für alle Felder danach kann dann eine Formel verwendet werden.
|
|
for(int i = 2; i < fibonaccifolge.length; i++) {
|
|
fibonaccifolge[i] = fibonaccifolge[i-1] + fibonaccifolge[i-2];
|
|
}
|
|
|
|
// Ausgeben der Fibonaccifolge.
|
|
for(int i = 0; i < fibonaccifolge.length; i++) {
|
|
System.out.println(fibonaccifolge[i]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ermitteln der Fibonaccizahlen mit einer iterativen Lösung.
|
|
* @param a Der Wert des Felds FN-2.
|
|
* @param b Der Wert des Felds FN-1.
|
|
* @param max Die Anzahl der Fibonaccizahlen welche ermittelt werden sollen.
|
|
* @return Die ermittelte Fibonaccizahl.
|
|
*/
|
|
public static int rekursiv(int a, int b, int max) {
|
|
|
|
// Der Beginn der Fibonaccifolge muss mit bestimmten Werten initialisiert werden.
|
|
// Die Werte werden dabei mit den Werten aus Variante 1 initialisiert.
|
|
if((a == 0 && b == 0) || (a == 0 && b == 1)) {
|
|
a = 0;
|
|
b = 1;
|
|
max -= 2;
|
|
System.out.println(a);
|
|
System.out.println(b);
|
|
}
|
|
|
|
// Anzahl der Felder reduzieren.
|
|
max--;
|
|
|
|
// Ausgeben der aktuellen Fibonaccizahl.
|
|
System.out.println((a + b));
|
|
|
|
// Es werden so lange Fibonaccizahlen erstellt so lange noch Felder verfügbar sind.
|
|
if(max > 0) {
|
|
return rekursiv(b, a + b, max);
|
|
} else {
|
|
return a + b;
|
|
}
|
|
}
|
|
}
|