Methoden Fibonacci in Array mit rekursiver Methoden

karl_patrick

Mitglied
Hallo!

An der Uni habe ich gerade mit einem Grundkurs zur Java Programmierung begonnen und komme nun an einer Stelle nicht weiter. Ich soll ein Programm schreiben, welches mit Hilfe einer rekursiven Methode die Stellen der Fibonacci Folge (von 3-10; also im Array der Position 2-9) berechnet und in ein Array schreibt. Ich scheitere allerdings an dem Versuch die Methode fib rekursiv zu schreiben, da sie ja zwei Rückgabewerte erwartet (einen Array und einen Int). Vielleicht kann mir hier jemand helfen? Hier mein derzeitiger Code:

Java:
class Fibonacci{

    //Berechnung, Speicherung und Ausgabe der Fibonacci-Folge 
    //mit Methoden und Arrays

    public static void main(String[] args){

        int[] startArray = {1,1,0,0,0,0,0,0,0,0};
       
        int[] resultArray = fib(startArray, 2);
       
        printFibArray(resultArray);

    }


    public static int[] fib(int[] array, int pos){

        // Ab hier darf der Code verändert werden.
       
        if (pos==0 || pos==1){
            return resultArray[pos]=1;
        }
        else if (pos<startArray.length){
            resultArray[pos]=(pos-1)+(pos-2);
            return fib (startArray[], pos++);
        }
    }
   
    // Ausgabe der Fibonacci-Folge
    public static int printFibArray(int[] array2){

        for (int i=0; i<resultArray.length;i++){
        System.out.println(resultArray[i]);

        }   
    }
}

Vielen Dank im Voraus!

Patrick
 

Joose

Top Contributor
Ich scheitere allerdings an dem Versuch die Methode fib rekursiv zu schreiben, da sie ja zwei Rückgabewerte erwartet (einen Array und einen Int). Vielleicht kann mir hier jemand helfen?
Warum werden 2 Rückgabewerte erwartet? Das Array ist klar, aber welcher int-Wert?

Laut deinem Code sind die Werte für Index 0 bzw Index 1 schon gesetzt, außerdem erhöhst du beim rekursiven Aufruf pos um 1. Wie sollte "pos" also jemals auf 0 oder 1 kommen?

Java:
public static int[] fib(int[] array, int pos) {
   // Ab hier darf der Code verändert werden.
   if (pos < startArray.length) {
     resultArray[pos] = (pos - 1) + (pos - 2); // diese berechnung ist falsch
     return fib (startArray[], pos++);
   } else {
     // Was soll hier passieren????
   }
}
 

karl_patrick

Mitglied
Hallo Joose, danke für deine Antwort. In der Tat habe ich die 0 und 1 nur benutzt, da wir vorher ein Beispiel hatten, bei der die pos Variable in die Konsole eingegeben wurde.

Ich habe mir das jetzt nochmal angeschaut und folgenden Ansatz:

Java:
public static int[] fib(int[] array, int pos){

        // Ab hier darf der Code verändert werden.
        array[0] = startArray[0];
        array[1] = startArray[1];
   
        if (pos<(startArray.length-1)){
            array[pos]=((pos-1)+(pos-2));
            fib(array, pos+1);
        }
        else {
            return array[pos]=((pos-1)+(pos-2));
        }
    }

Leider sagt mir hier der Compiler, dass er meine beiden Arrays nicht findet, obwohl diese ja in der selben Klasse gespeichert sind. Ich bin mir zudem bei zwei Punkten unsicher:
1) Muss ich die ersten beiden Einträge ins array schreiben oder werden die automatisch ins resultArray übertragen
2) Muss ich die Ausgaben der Methode in das resultArray schreiben oder in das startArray, weil die automatisch übertragen werden

Vielen Dank und Liebe Grüße
 

VfL_Freak

Top Contributor
Moin,

erstens ist "startArray" (zumindest lt. deines Codesausschnittes) nicht bekannt!
Und zweitens: warum versuchst Du, die ersten beiden Stellen des übergebenen Arrays zu überschreiben ??
Drittens: welcher Fehler kommt wo genau ??

Gruß Klaus
 

karl_patrick

Mitglied
Hallo Klaus, ich habe jetzt nur die Methode aus der Klasse in meiner Anfangsfragestellung überarbeitet (und gepostet), aber in der Klasse sind die beiden deklariert und startArray doch initialisiert worden.

Sind alle Einträge durch die Übergabe automatisch im array - Array gespeichert? Dann kann ich mir die beiden Zeilen tatsächlich sparen..

Fehler kommen folgende:

Code:
Fibonacci.java:20: error: cannot find symbol
        array[0] = startArray[0];
                   ^
  symbol:   variable startArray
  location: class Fibonacci
Fibonacci.java:21: error: cannot find symbol
        array[1] = startArray[1];
                   ^
  symbol:   variable startArray
  location: class Fibonacci
Fibonacci.java:23: error: cannot find symbol
        if (pos<(startArray.length-1)){
                 ^
  symbol:   variable startArray
  location: class Fibonacci
Fibonacci.java:28: error: incompatible types: int cannot be converted to int[]
            return array[pos]=((pos-1)+(pos-2));
                             ^
 

karl_patrick

Mitglied
Danke für deine Bemühungen!

Aber irgendwie habe ich das Gefühl, wir reden aneinander vorbei.. :confused:

Das Array mit dem Namen "array" existiert doch nur innerhalb meiner Methode "fib" und bekommt doch erst mit dem Methodenaufruf Werte übergeben. So wie ich das verstehe sind das die Werte vom "startArray" durch diese Codezeile:
Java:
int[] resultArray = fib(startArray, 2);
Somit brauche ich -nach meinem Verständnis- in der tat nicht mehr die ersten beiden Stellen überschreiben. Jetzt sollen doch in meiner Methode "fib" alle Werte in "array" gespeichert und dann nach "resultArray" kopiert werden. Zum Verständnis hier noch einmal mein (überarbeiteter) kompletter Code:

Java:
class Fibonacci{

    //Berechnung, Speicherung und Ausgabe der Fibonacci-Folge
    //mit Methoden und Arrays

    public static void main(String[] args){

        int[] startArray = {1,1,0,0,0,0,0,0,0,0};
     
        int[] resultArray = fib(startArray, 2);
     
        printFibArray(resultArray);

    }


    public static int[] fib(int[] array, int pos){

        // Ab hier darf der Code verändert werden.
        if (pos<startArray.length){
            array[pos]=((pos-1)+(pos-2));
            fib(array, pos+1);
        }
        else {
            return array;
        }
    }
 
    // Ausgabe der Fibonacci-Folge
    public static int printFibArray(int[] array2){

        for (int i=0; i<resultArray.length;i++){
        System.out.println(resultArray[i]);

        } 
    }
}

Doch es kommen noch immer folgende Fehlermeldungen:

Code:
Fibonacci.java:20: error: cannot find symbol
        if (pos<startArray.length){
                ^
  symbol:   variable startArray
  location: class Fibonacci
Fibonacci.java:32: error: cannot find symbol
        for (int i=0; i<resultArray.length;i++){
                        ^
  symbol:   variable resultArray
  location: class Fibonacci
Fibonacci.java:33: error: cannot find symbol
        System.out.println(resultArray[i]);
                           ^
  symbol:   variable resultArray
  location: class Fibonacci
Liebe Grüße
 

mariane

Mitglied
Zum Fehler: in der Methode fib() ist startArray nicht definiert, der Methode ist bisher nur das übergebene Array Namens array bekannt.

Dann das Thema "rekursiv", ich zweifle, dass ihr das vorgebenes Problem rekusiv lösen sollt. In der Vorgabe steht nichts von Rekusiv. Ich denke eher, ihr sollt das Array schrittweise auffüllen in der Art
Code:
array[i] = array[i-1]+array[i-2]
mit i = 2 ... 9 ;)
 

JStein52

Top Contributor
startArray und resultArray sind ja nur in der Methode main bekannt. Also hat der Compiler erst mal recht.
Also schreibst du
Code:
if (pos<array.length){
 

karl_patrick

Mitglied
Bei dem rekursiven Ansatz bin ich mir sehr sicher s.u.

Hier die Aufgabenstellung:

Implementieren Sie die Java Methode fib, welches die ersten 10 Glieder (n=1...10) der unten stehenden Fibo- naccifolge berechnet. Verwenden Sie dazu rekursive Methodenaufrufe!
Die Funktion fib soll den entsprechenden Wert für die Stelle pos berechnen, in das Array schreiben und sich dann selbst mit inkrementierter Position aufrufen. Achten Sie auf die Rückgabewerte und Abbruchbedinungen! Erstellen sie kein neues Array sondern arbeiten Sie auf dem übergebenen Parameter! Der Methodenaufruf soll alle Nullen durch die berechneten Werte ersetzen.
 

mariane

Mitglied
Deine Klasse sollte Public sein.
Die Ausgabe Methode printFibArray() hat keinen Rückgabewert benutze "void".
Die Rekursion wird durch return fib(...); erreicht, im Abbruchfall nur return array;
Achte auf den Arraynamen.
 

karl_patrick

Mitglied
Danke JStein52!
Logisch, dass die die Arrays in der Main Methode den selben Regeln folgen, wie in anderen Methoden - da habe ich nicht richtig nachgedacht. Somit löst deine Hilfe auch (fast) alle Probleme.

Mein Compiler gibt mir am Ende von den beiden Methoden (nicht main) die Fehlermeldung, dass ein return Wert fehlt:
Code:
Fibonacci.java:27: error: missing return statement
    }
    ^
Fibonacci.java:36: error: missing return statement
    }
    ^
2 errors
Bei der ersten löse ich das Problem, indem ich den "else" Teil entferne und direkt "return array;" verwende. Aber beim zweiten erwartet die Methode als Ausgabe ein Integer!?
 

karl_patrick

Mitglied
Oh Hallo Mariane, ja danke, zu dem ersten bin ich auch schon gekommen. Und auch bei dem zweiten, war dies mein Ansatz. Ich dachte jedoch, dass mir dieser Methodenkopf auch gegeben wurde - nach erneutem nachsehen ist dem aber nicht so -> ich kann void benutzen -> Probleme gelöst!

Herzlichen Dank allen freundlichen Helfern!!
 
X

Xyz1

Gast
Die Anforderungen sind ungenau, und wenn array und pos übergeben werden, dann ist es einfach nur eine in rekursiv umgewandelte Schleife / rekursive Schleife.

Sag deinem Prof., die Aufgabenstellung ist ungenau, du wirst diese Aufgabe nicht bearbeiten. (Optimalerweise formulierst du das noch in sehr freundlich)

Ich habe schon drei mögliche Lösungen, wobei das alles Bad/Terrible code ist.^^
 

JStein52

Top Contributor
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
Z Fibonacci Array Erklärung Java Basics - Anfänger-Themen 5
S Abwandlung der Fibonacci Folge Java Basics - Anfänger-Themen 3
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
123456789sssssaaaa Which is the best way to Print Fibonacci Series in Java? Java Basics - Anfänger-Themen 3
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
J Fibonacci-Reihe Java Basics - Anfänger-Themen 12
G Fibonacci Zahlenreihe Fehler Java Basics - Anfänger-Themen 4
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
V Fibonacci Folge Java Basics - Anfänger-Themen 4
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
A Fibonacci Zahlen Java Basics - Anfänger-Themen 1
M Methoden Fibonacci-Folge Java Basics - Anfänger-Themen 6
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
P Fibonacci -Verallgemeintert Java Basics - Anfänger-Themen 2
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Fibonacci Zahlen Java Basics - Anfänger-Themen 3
M Fibonacci-Folge mit while-Schleife Java Basics - Anfänger-Themen 4
P fibonacci - do while Statement Logik Fehler Java Basics - Anfänger-Themen 5
A Fibonacci-numbers Java Basics - Anfänger-Themen 9
K Rekursion Fibonacci Java Basics - Anfänger-Themen 3
J Fibonacci Zahlen berechnen Java Basics - Anfänger-Themen 3
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
A Gerade Terme der Fibonacci-Folge aufsummieren Java Basics - Anfänger-Themen 12
M Fibonacci, Fakultaet, GGT Java Basics - Anfänger-Themen 9
C Fibonacci Zahlen Java Basics - Anfänger-Themen 7
J Ausgabe der fibonacci Zahlen Java Basics - Anfänger-Themen 4
S Fibonacci Folge Java Basics - Anfänger-Themen 34
D Fibonacci Java Basics - Anfänger-Themen 11
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
W Fibonacci Zahlenberechnung Java Basics - Anfänger-Themen 9
X Fibonacci mit durchschnittlicher Zeit Java Basics - Anfänger-Themen 5
I Fibonacci-Folge , direkter Weg. Java Basics - Anfänger-Themen 5
G Fibonacci Algorithmus Java Basics - Anfänger-Themen 22
0 Fibonacci Zahlen seeeehr schnell berechnen Java Basics - Anfänger-Themen 9
S Fibonacci Rückrechnung! Java Basics - Anfänger-Themen 5
K Fibonacci Zahlen Java Basics - Anfänger-Themen 2
K Programmieren von den ersten 70 Fibonacci-Zahlen Java Basics - Anfänger-Themen 2
G fibonacci was stimmt an meinem code nicht? Java Basics - Anfänger-Themen 2
S Fibonacci Zahlenvergeich Java Basics - Anfänger-Themen 6
G Iterativer Algorithmus zur Berechnung der Fibonacci Zahlen Java Basics - Anfänger-Themen 1
P Fibonacci-Zahlen Java Basics - Anfänger-Themen 6
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben