Fibonacci mit einer Hilfsmethode berechnen

Timo2002

Mitglied
Hallo,
ich habe die Aufgabe die fibonacci Folge mit einer rekursiven Hilfsmethode zu berechnen.
Die Hilfsmethode soll dabei allerdings mit:
return fibonacchiRechner(zahl, zahl -1, zahl -2)
aufgerufen werden.

und nicht wie ich es getan habe mit:
return fibonacciRechner(zahl, 0, 1)

Leider kriege ich es mit dem Aufruf oben nicht wirklich hin. Wäre deshalb über Hilfe dankbar.


Mein Code:
Code:
    public static int fibonacci(int zahl) {
        return fibonacciRechner(zahl, 0, 1);
    }

    public static int fibonacciRechner(int zahl, int a, int b) {
        if (zahl == 0) {
            return a;
        } else {
            return fibonacciRechner(zahl -1, b, a+b );
        }

    }
 
Also Endrekursiv.

Mach doch so

Java:
public static int fibonacciRechner(int a, int b, int c) {
    if (a <= 0)
        return c;
    return fibonacciRechner(a-1, c, b+c);
}
Hey,
Vielen Dank für deine Antwort.

Leider komme ich mit dem Code nicht auf das richtige Ergebnis:
Java:
    public static int fibonacci(int zahl) {
        return fibonacciRechner(zahl, zahl -1, zahl -2);
    }

    public static int fibonacciRechner(int a, int b, int c) {
        if (a <= 0)
            return c;

        return fibonacciRechner(a-1, c, b+c);
    }

Erhalte hier bei Zahl = 6, den Wert 92.
Normal sollte es ja 8 ergeben.
 
Hi, bei mir stimmt die Ausgabe:

Java:
    public static int fibonacci(int x) {
        return fibonacciRechner(x - 2, 1, 1);
    }

    private static int fibonacciRechner(int a, int b, int c) {
        if (a <= 0) {
            return c;
        }
        return fibonacciRechner(a - 1, c, b + c);
    }

    public static void main(String[] args) {
        for (int i = 1; i <= 7; i++) {
            System.out.println(fibonacci(i)); // Prints: 1 1 2 3 5 8 13
        }
        System.out.println(fibonacciRechner(1, 987, 1597)); // Prints: 2584
    }

Du solltest mit x, 1, 1 aufrufen, das sind die ersten Zahlen der Fibonacci-Folge...

 
Es geht aber auch mit der Quadratwurzel. 🙂 Aber ich nehme an, Rekursion ist gerade das Thema ...

Java:
    public static int fibonacci_1(int n) {
        return fibonacciRechner(n - 2, 1, 1);
    }

    public static int fibonacci_2(int n) {
        return (int) Math.round((Math.pow((1 + Math.sqrt(5)) / 2, n) - Math.pow((1 - Math.sqrt(5)) / 2, n)) / Math.sqrt(5));
    }

    private static int fibonacciRechner(int a, int b, int c) {
        if (a <= 0) {
            return c;
        }
        return fibonacciRechner(a - 1, c, b + c);
    }

    public static void main(String[] args) {
        for (int i = 1; i <= 7; i++) {
            System.out.println(fibonacci_1(i)); // Prints: 1 1 2 3 5 8 13
            System.out.println(fibonacci_2(i)); // Prints: 1 1 2 3 5 8 13
        }
        System.out.println(fibonacciRechner(1, 987, 1597)); // Prints: 2584
    }
 
Kein Problem 🙂 Die Hilfsmethode hattest du ja schon, und es fehlte nur noch der korrekte Aufruf.

Die Hilfsmethode soll dabei allerdings mit:
return fibonacchiRechner(zahl, zahl -1, zahl -2)
aufgerufen werden.
Könnte es sein, dass hier fr( n, f(n-1), f(n-2) ) eigentlich gemeint war (fr ist die rekursive Hilfsmethode)? (Also mit "inneren" Aufrufen ...)

Lehrer sind ja meist etwas schlampig, wenn sie Aufgaben verteilen. 😀
 
Könnte es sein, dass hier fr( n, f(n-1), f(n-2) ) eigentlich gemeint war (fr ist die rekursive Hilfsmethode)? (Also mit "inneren" Aufrufen ...)

Lehrer sind ja meist etwas schlampig, wenn sie Aufgaben verteilen. 😀

Haha, ja genau das war mein Denkfehler. Hätte der Professor das ein wenig klarer formuliert, hätte ich mir paar Stunden ersparen können. 😀
 
Haha, ja genau das war mein Denkfehler. Hätte der Professor das ein wenig klarer formuliert, hätte ich mir paar Stunden ersparen können. 😀
Professoren sind auch nur Menschen 🙂 Manche dürfen es sich erlauben, unklare Aufgaben zu stellen, wieder andere nicht :/

Btw, in fibonacci(int x) muss noch geprüft werden, ob das Argument "sinnvoll" wäre - denn es gibt keine Fibonacci-Zahlen für negative Werte (und für 0)
 
Zusätzlich bitte noch prüfen, ob das Ergebnis von b + c im positiven Integerbereich ist... Ist es dies nicht, bitte entsprechend reagieren...

Es sind wegen Über-/Unter-läufen schon Raketen abgestürzt. 🙁 (Auch, wenn bei denen nicht Java eingesetzt wird... Es geht ja um clean code)
 

Zurück
Oben