VL-Programmieren/S01-VL05-Aufgabe 1/Aufgabe.java
2023-12-05 15:38:37 +01:00

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;
}
}
}