Java Fibonacci Folge Problem

G

Gast1697188204

Guest
Hi Leute!

Ich als totaler Java-Noob soll nun eine for-Schleife schreiben, welche die Fibonacci-Folge ausgiebt. Ich habe bereits einen Code angefertigt, nur gibt dieser nicht die richtigen Zahlen aus.

Code:
public class Fibonacci{
	public static void main(String[] args) {
		int a = 1, b = 1, c = 1;
		for (int i = 1; i < 20; i++) {
			a = b;
			b = c;
			c = a + b;
			System.out.println("Der Fibonacci-Wert " + i + " ergibt " + c);
		}
	}
}

Dieser gibt nun das Hier aus:

Der Fibonacci-Wert 1 ergibt 2
Der Fibonacci-Wert 2 ergibt 3
Der Fibonacci-Wert 3 ergibt 5
Der Fibonacci-Wert 4 ergibt 8
Der Fibonacci-Wert 5 ergibt 13
...
...

Eigentlich muss er aber diesen hier ausgeben:

Der Fibonacci-Wert 1 ergibt 1
Der Fibonacci-Wert 2 ergibt 1
Der Fibonacci-Wert 3 ergibt 2
Der Fibonacci-Wert 4 ergibt 3
Der Fibonacci-Wert 5 ergibt 55
...
...

Wo liegt mein Fehler?

Vielen Dank im Voraus,

Dash.
 
Die Folge, die Dein Programm ausgibt ist eigentlich richtig, bis auf ein paar kleine Punkte, die Du berücksichtigen musst.

Vorab: man kann die Fibonacci Folge mit 1, 1 oder 0, 1 starten. Ist egal. Der Mathematiker ist da ganz Oportunist und macht es so, wie es ihm gerade am besten in den Kram passt.

Wenn Du die Startwerte 1, 1 setzt, ist F1 = 1 und F2 = 1. Du startest die Berechnung dann natürlich erst mit F1 + F2 = F3. Dann kommt raus:

F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
usw.

Wie kommst Du auf die Idee, dass F5 = 55 sein soll?

Mein Problem ist jetzt, dass die Lösung Deines Problems extrem einfach ist. Es geht um die Startwerte, schau Dir die mal genau an. Wenn ich Dir die richtigen jetzt einfach hier hin schreibe bin ich mir nicht sicher, ob Du was daraus lernst.
 
Hier die korrigierte Version deines Programms :)

Code:
public class Fibonacci {

	public static void main(String[] args) {
		int a = 0, b = 1, c = 0;
		
		System.out.println(a);
		System.out.println(b);
		
		for (int i = 1; i < 20; i++) {
			c = a + b;
			System.out.println(c);
			a = b;
			b = c;
		}
	}

}

Hierbei ist es auch egal, ob a=0, b=1 oder a=1, b=1 ist :)

Mit freundlichen Grüßen
crazy
 
hi, ich hab das auch mal durch gemacht.
Beispiel: Fibonaccizahlen

public class Fibo{

public static
void main(String[] args){

int a = 1;
int b = 1;
int c = 1;
int n = Integer.parseInt(args[0]);
int i = 1;

while (
i < n){
b = a;
a = c;
c = a + b;
i++;
}

System.out.println(c);
}
}

oder:

public class FiboMain{

public static int fibo(int i){

if(i == 0) return 0;
if(i == 1) return 1;

return fibo(i - 1) + fibo(i - 2);
}

public static void main(String[] args){

System.out.println(fibo(Integer.parseInt(args[0])));
}
}

oder
public static long fib(int a){
if (a==1||a==2) return 1;
else return fib(a-1)+fib(a-2);
}Wir testen die Methode in einem kleinen Demo-Programm:
import info1.*;
public class FibonacciDemo1{
public static void main(String[] args){
System.out.print("Geben Sie ein Zahl an: ");
int a = Console.in.readInt();
System.out.println("fib("+a+") = " + fibonacci(a));
}
private static int fibonacci(int a){
if (a==1||a==2) return 1;
else return fibonacci(a-1)+fibonacci(a-2);
}
}
oder:
R. Schiedermeier - Programmieren mit Java II

hoffe da sind ein paar denkanstöße dabei:)

MfG
M.

 
Oh man, jetzt sehe ich es selber.. :D
War wahrscheinlich etwas zu spät gestern ^^ Vielen Dank euch dreien, mal sehen was mein Prof dazu sagt :)

Vielen Dank,

Dash.
 
Zurück