Vorlesung 5 / Aufgabe 1

This commit is contained in:
Sebastian Brosch 2024-05-09 12:31:36 +02:00
parent c14cedfcd9
commit a6205b597b
2 changed files with 57 additions and 81 deletions

View File

@ -1,81 +0,0 @@
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;
}
}
}

View File

@ -0,0 +1,57 @@
package VL05.Aufgabe01;
/**
* Vorlesung 5 / Aufgabe 1
*
* @author Sebastian Brosch
*/
public class Aufgabe01 {
public static void main(String[] args) {
final int MAX_NUMBER = 45;
// get all fibonacci numbers using a iterative solution.
for (int i = 0; i < MAX_NUMBER; i++) {
System.out.printf("Fibonacci Nr. %d: %d\n", (i + 1), iterativeFibonacci(i));
}
// get all fibonacci numbers using a recursive solution.
for (int j = 0; j < MAX_NUMBER; j++) {
System.out.printf("Fibonacci Nr. %d: %d\n", (j + 1), recursiveFibonacci(j));
}
}
/**
* Method to get a specific fibonacci number using a iterative solution.
*
* @param nth The number of the fibonacci number.
* @return The fibonacci number.
*/
private static int iterativeFibonacci(int nth) {
int[] fib = { 1, 1 };
for (int i = 0; i <= nth; i++) {
if (i < fib.length)
continue;
int result = fib[0] + fib[1];
fib[0] = fib[1];
fib[1] = result;
}
return fib[1];
}
/**
* Method to get a specific fibonacci number using a recursive number.
*
* @param nth The number of the fibonacci number.
* @return The fibonacci number.
*/
private static int recursiveFibonacci(int nth) {
if (nth == 0 || nth == 1) {
return 1;
} else {
return recursiveFibonacci(nth - 2) + recursiveFibonacci(nth - 1);
}
}
}