Negafibonacci Folge berechnen

SnowDragon

Mitglied
Hallo, Ich muss die folgende Aufgabe lösen:
vervollständigen Sie die Methode solve() der Klasse Negafibonacci derart, dass sie für die als Parameter übergebene ganze Zahl n das n-te Glied der Folge zurückgibt.
Das ist meine Methode:
Code:
public static int solve(int n) {
        // Don't delete!! Tests will fail otherwise
        // Pass object r to other function calls of solve (e.g. for recursion). Do not create other instances of object r
        // Function solve(...) must be recursive, don't implement other recursive helper functions
        //r.check();

        // TODO
        if (n>=0){
           if(n == 0) {
                 return 0;
               } else if (n == 1) {
                 return 1;
               } else {
                  //System.out.println(solve(n-1) + solve(n-2));
                  return solve(n-1) + solve(n-2); //der rekursive Aufruf
               }}
        else{
            if(n == 0) {
                 return 0;
               } else if (n == -1) {
                 return 1;
               } else {
                   if (n%2==0){
                  //System.out.println(solve(n-1) + solve(n-2));
                  return solve(n+1) + solve(n+2);}
                   else{
                       return (solve(n+1) + solve(n+2)); //der rekursive Aufruf
                   }
               }}
        }
Die Methode funktioniert für alle Zahlen, außer negative gerade Zahlen. Bei n=-4 kommt z.B 3 raus statt -3. Das heißt, ich muss den ergebniswert bei negativen geraden Zahlen invertieren, aber wie?
 

JStein52

Top Contributor
Ich weiss nicht ob es daran liegt aber du fragst oben ab:
if (n>=0) {
....
} else if (n==0) {
...
}
In den unteren Teil kommt er nie rein ! Also in dieses return 0;

Deine Formatierung macht einen ja krank ....
 

JStein52

Top Contributor
wozu ist diese Unterscheidung gut wenn du eh das selbe machst :
Code:
                if (n % 2 == 0) {
                    //System.out.println(solve(n-1) + solve(n-2));
                    return solve(n + 1) + solve(n + 2);
                } else {
                    return (solve(n + 1) + solve(n + 2)); //der rekursive Aufruf
                }
 

JStein52

Top Contributor
Code:
        else{
            if(n == 0) {
                 return 0;  <-------  hier wirst du nie hinkommen
               } else if (n == -1) {
                 return 1;
               } else {
 

SnowDragon

Mitglied
wozu ist diese Unterscheidung gut wenn du eh das selbe machst :
Code:
                if (n % 2 == 0) {
                    //System.out.println(solve(n-1) + solve(n-2));
                    return solve(n + 1) + solve(n + 2);   <-- hier muss ich was ändern, denke ich. Und zwar so, dass, falls n = -4 nicht wie momentan der fall 3 rauskommt, sondern -3, so wie die negafibonacci Folge definiert ist.
                } else {
                    return (solve(n + 1) + solve(n + 2)); //der rekursive Aufruf
                }
 

SnowDragon

Mitglied
So sollte es eigentlich aussehen:
n=-8 -> -21 bei mir: 21
n=-7 -> 13
n=-6 -> -8 bei mir: 8
n=-5 -> 5
n=-4 -> -3 bei mir: 3
n=-3 -> 2
n=-2 -> -1 bei mir: 2
n=-1 -> 1
n=0 -> 0
n=1 -> 1
n=2 -> 1
n=3 -> 2
n=4 -> 3
n=5 -> 5
n=6 -> 8
n=7 -> 13
n=8 -> 21
 

prise1993

Mitglied
Also ich kann dir jetzt nicht sagen wo bei dir der Fehler liegt der Code ist ein bisschen verworren ;)
Das funktioniert:

Java:
private static int fiboRec(int n) {
        if (n == 0){
            return 0;
        }else if (n == 1){
            return n;
        }else if (n == -1){
            return n;
        } else if (n > 1){
            return fiboRec(n - 2) + fiboRec(n - 1);
        }else {
            return  fiboRec(n + 2) + fiboRec(n + 1);
        }
    }
Viel Spass damit
 

prise1993

Mitglied
@JStein52 Danke! Hätt ich eigentlich selber gucken können
Java:
 private static int fiboRec(int n) {
        if (n == 0) {
            return 0;
        } else if (n == 1) {
            return n;
        } else if (n < 0) {
            return (int)Math.pow(-1,n+1)*fiboRec(-n);
        }
        else {
            return fiboRec(n - 2) + fiboRec(n - 1);
        }
}

Jetzt machts das was es soll
 
X

Xyz1

Gast
Wieso nicht einfach so:
Java:
    public static int solve(int n) {
        if (n == 0) {
            return 0;
        }
        if (n == +1) {
            return 1;
        }
        if (n < 0) {
            return (n % 2 == 0 ? -1 : +1) * solve(-n);
        }
        return solve(n - 1) + solve(n - 2);
    }

Spart ein read, ein if und das lästige .pow() ...
 

mariane

Mitglied
... die Fallunterscheidung kommt ganz ohne Rechnen aus. :)
Code:
... 
return ((n & 1) == 0 ? -solve(-n) : solve(-n));
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Abwandlung der Fibonacci Folge Java Basics - Anfänger-Themen 3
berserkerdq2 Wo geschieht der "Rücksprung, bei der rekursiven Folge Java Basics - Anfänger-Themen 5
sserio Längste Collatz-Folge Java Basics - Anfänger-Themen 11
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
J Rekursive Folge (a=a-1) Java Basics - Anfänger-Themen 9
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
D Hofstäter Q Folge Java Basics - Anfänger-Themen 3
V Fibonacci Folge Java Basics - Anfänger-Themen 4
M Methoden Fibonacci-Folge Java Basics - Anfänger-Themen 6
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
T Algortihmus: Kürzeste Folge zu einer Zahl Java Basics - Anfänger-Themen 40
G Harmonische Rekursive Folge Java Basics - Anfänger-Themen 3
M Fibonacci-Folge mit while-Schleife Java Basics - Anfänger-Themen 4
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
A Gerade Terme der Fibonacci-Folge aufsummieren Java Basics - Anfänger-Themen 12
R Roboter - Helmich Folge 6 Java Basics - Anfänger-Themen 32
S rekursive folge verbessern Java Basics - Anfänger-Themen 2
H JOptionPane YES Option mit Folge? Java Basics - Anfänger-Themen 2
P Collatz-Folge mittels indirekter Rekursion Java Basics - Anfänger-Themen 8
X Problem mit Ducci-Folge Java Basics - Anfänger-Themen 7
S Fibonacci Folge Java Basics - Anfänger-Themen 34
B Element in Folge suchen Java Basics - Anfänger-Themen 7
L iterative und rekursive Folge Java Basics - Anfänger-Themen 20
N Folge verschiedener Nährwerte zur Kubikwurzel Java Basics - Anfänger-Themen 15
I Fibonacci-Folge , direkter Weg. Java Basics - Anfänger-Themen 5
J Wurzel mit einer Folge brechnen Java Basics - Anfänger-Themen 5
E Rekursive definierten Folge Java Basics - Anfänger-Themen 10
D Bit-Folge bearbeiten Java Basics - Anfänger-Themen 2
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
laxla123 Quersumme berechnen Java Basics - Anfänger-Themen 1
I For Schleife Summe berechnen Java Basics - Anfänger-Themen 13
S Vollmond berechnen und ausgeben Java Basics - Anfänger-Themen 12
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
A Berechnen Moor Nachbarschaft Java Basics - Anfänger-Themen 5
E Geburtstag im Schaltjahr berechnen Java Basics - Anfänger-Themen 24
Lion.King Schaltjahr berechnen Java Basics - Anfänger-Themen 31
E Alter (Laufzeit) berechnen Java Basics - Anfänger-Themen 11
I Zuschläge berechnen Java Basics - Anfänger-Themen 15
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
L Präfix berechnen Java Basics - Anfänger-Themen 33
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
I Potenz berechnen mit for-Schleife Java Basics - Anfänger-Themen 3
A Standardabweichung in Java berechnen Java Basics - Anfänger-Themen 10
H Gesamtabweichung mit Array berechnen Java Basics - Anfänger-Themen 2
G Java Rabatt berechnen Java Basics - Anfänger-Themen 8
V Rückgeld berechnen Java Basics - Anfänger-Themen 6
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
Ianatrix Zahlen von a bis b berechnen Java Basics - Anfänger-Themen 7
L Max, min, Summe und Durchschnitt berechnen Java Basics - Anfänger-Themen 4
L Anhalteweg berechnen Java Basics - Anfänger-Themen 6
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
M Quadratwurzel berechnen Java Basics - Anfänger-Themen 8
V Wachstum berechnen und in Ist-Formel verwenden Java Basics - Anfänger-Themen 5
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Abschreibungsplan berechnen Java Basics - Anfänger-Themen 23
V Gehalt berechnen in Java Java Basics - Anfänger-Themen 6
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
L Anzahl der benachbarten Minen berechnen und setzen Java Basics - Anfänger-Themen 15
J Array Speicherplatz berechnen Java Basics - Anfänger-Themen 35
H Eingabedaten berechnen Java Basics - Anfänger-Themen 9
B Tranportkosten berechnen mit unterschiedlichen MwSt Java Basics - Anfänger-Themen 9
L Anzahl der Paare deren Summe = 0 ergibt berechnen Java Basics - Anfänger-Themen 0
V Erste Schritte Berechnen von Sinus; sin(x) ohne Math.* Java Basics - Anfänger-Themen 1
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
N Ein Datum berechnen Java Basics - Anfänger-Themen 3
T Sparplan berechnen Java Basics - Anfänger-Themen 4
F Abstand zum Durchschnitt von 5 Zahlen berechnen... Java Basics - Anfänger-Themen 16
B java.util.Date berechnen Java Basics - Anfänger-Themen 11
P Mittelwert Arrayelemente berechnen Fehler Java Basics - Anfänger-Themen 5
CptK Best Practice Schussparabel berechnen Java Basics - Anfänger-Themen 3
T Modulo / Pow berechnen Java Basics - Anfänger-Themen 4
E Statistische Kennzahlen berechnen Java Basics - Anfänger-Themen 2
F Switch Case Modulo berechnen Java Basics - Anfänger-Themen 12
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
C Preis berechnen mit Java Java Basics - Anfänger-Themen 4
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
N Best Practice Image recognition fuzzy Superhash berechnen Java Basics - Anfänger-Themen 1
Dawinartor Erste Schritte Schaltjahr berechnen Java Basics - Anfänger-Themen 1
L Pi berechnen Java Basics - Anfänger-Themen 1
CptK Term (als String) berechnen und ausgeben Java Basics - Anfänger-Themen 10
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
J Variablen arithmetischen Mittelwert berechnen Java Basics - Anfänger-Themen 5
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
R Winkel berechnen bzw. Geraden sortieren Java Basics - Anfänger-Themen 33
I Schnittpunkt zweier Geraden berechnen Java Basics - Anfänger-Themen 25
M Erste Schritte Mittelwert berechnen -> Methode in der Methode? Java Basics - Anfänger-Themen 14
S Compiler-Fehler Schaltjahr berechnen Java Basics - Anfänger-Themen 5
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
S Durchschnitt berechnen aus zwei Textfeldern Java Basics - Anfänger-Themen 21
D Summe berechnen mit verändertem Wert aus Schleife Java Basics - Anfänger-Themen 1
R Liga Berechnen Java Basics - Anfänger-Themen 1
P Klassen Berechnen mehrerer Map-Werte Java Basics - Anfänger-Themen 13
R Fussballtabellen berechnen Java Basics - Anfänger-Themen 12
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
F ISBN Prüfziffer berechnen Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben