Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Fibonacci Reihe

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.02.2003
    Ort
    Wien
    Beiträge
    24

    Fibonacci Reihe

    Ich möchte in C# mit Hilfe einer Rekursion die Fibonacci-Reihe ausgeben. Natürlich is es kein Problem die einzelnen Werte der Reihe zu berechnen, ich möchte aber die komplette Reihe bis zu einem gewissen Index ausgeben. Natürlich könnte ich um den Funktionsaufruf eine for-Schleife drüberlegen, will ich aber nicht.
    Code:
    public static int fibo(int n)
    	{
    		if (n == 0 || n == 1)
    			return 1;
    		else
    			return fibo(n-1) + fibo(n-2);
    	}
    Kann mir da jemand helfen?
    Cyber Anarchist

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.10.2005
    Ort
    MATRIX
    Beiträge
    91

    bin zwar leihe

    aber kannst du nicht bei "else" einfach ein printf dazupacken ??
    Ich will ja die Welt verbessern, aber Gott gibt mir den Quellcode nicht. Aber die Grafik hat er geil hinbekommen!

  3. #3
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Wenn ich das richtig verstanden habe, soll diese Methode das was sie zurück gibt (oder das was sie bekommt?) einfach in eine Liste pushen. Oder?

    Dann mach doch einfach in der Klasse wo die Methode drin ist ein Array von ints als Member und leg das dort ab.

    Du musst natürlich wissen wann Du den Array wieder "zurücksetzen" musst (also beim "ersten" Aufruf der Methode (der der halt als letzter zurück kehrt, weisst schon was ich meine)).
    Vielleicht machst Du es einfach so, das man die Methode nicht direkt aufrufen kann (also nicht public) sondern dem Objekt über ne set-Methode die Zahl übergeben muss und dann im Zuge dieser Set-Methode der Array zuerst zurückgesetzt und dann der neue erstellt wird.
    Wäre das ne Möglichkeit? Oder muss die Liste ein Return Wert einer Methode sein die die Zahl übergeben bekommt? Wenn ja, dann versuch aus das ganze iterativ darzustellen, dann geht das auch...
    chmod -R +t /*

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Definiere doch einfach ein Array mit 100 Einträgen, fülle die ersten beiden mit 1 und lasse dann eine for-schleife drüber
    Code:
    for(n=2 ; n<100 ; n++) fib_array[n] = fib_array[n-1] + fib_array[n-2]
    (Kann sein, dass das kein gültiges PHP ist, hab schon ewig kein PHP mehr geschrieben.

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Zitat Zitat von Joghurt
    Definiere doch einfach ein Array mit 100 Einträgen, fülle die ersten beiden mit 1 und lasse dann eine for-schleife drüber
    Code:
    for(n=2 ; n<100 ; n++) fib_array[n] = fib_array[n-1] + fib_array[n-2]
    (Kann sein, dass das kein gültiges PHP ist, hab schon ewig kein PHP mehr geschrieben.
    Wenn du jetzt noch ein $ vor die Variablen schreibst, ist das richtig so.

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von 7.e.Q
    Wenn du jetzt noch ein $ vor die Variablen schreibst, ist das richtig so.
    Wenn du mir jetzt noch erklärst, warum ich auf eine C#-Frage mit PHP-Code antworte, bin ich glücklich

  7. #7
    Registrierter Benutzer
    Registriert seit
    06.02.2003
    Ort
    Wien
    Beiträge
    24
    Danke für die Antworten, hat mir auf jeden Fall geholfen, hier mein Code:
    Code:
    using System;
    
    class Fibonacci
    {
    	private int[] fibarray;
    
    	private int fibo(int n)
    	{
    		if (n == 0)
    		{
    			this.fibarray[0] = 0;
    			return 0;
    		}
    		if (n == 1)
    		{
    			this.fibarray[1] = 1;
    			return 1;
    		}
    		else
    		{
    			this.fibarray[n] = (fibo(n-1) + fibo(n-2));
    			return fibarray[n];
    		}
    	}
    
    	public void calcFibo(int x)
    	{
    		this.fibarray = new int[x+1];
    		for (int i=0; i<this.fibarray.Length; i++)
    			this.fibarray[i] = 0;
    		this.fibo(x);
    	}
    
    	public void showFibo()
    	{
    		Console.WriteLine("Fibonacci-Reihe: ");
    		Console.WriteLine("--------------------------");
    
    		for (int i=0; i<this.fibarray.Length; i++)
    			Console.Write(this.fibarray[i] + " ");
    	}
    
    
    	static void Main()
    	{
    		int answer = 0;
    		Console.Write("Bis zu welcher Stelle: ");
    		answer = Convert.ToInt32(Console.ReadLine());
    		Console.WriteLine("Calculating...");
    		Console.Write("\n");
    		Fibonacci f1 = new Fibonacci();
    		f1.calcFibo(answer);
    		f1.showFibo();
    		Console.Write("\n");
    		Console.Write("\n");
    		Console.WriteLine("Done!");
    	
    		Console.Read();
    	}
    }
    Geändert von mario88 (25-10-2005 um 17:36 Uhr)
    Cyber Anarchist

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Aber wenn du eh schon die Werte in einem Array speicherst, kannst du dir die Rekursion getrost schenken! Rekursiv hat Fib nämlich O(N^2), mit Speichern im Array nur O(N).

  9. #9
    Registrierter Benutzer Avatar von dra
    Registriert seit
    02.11.2004
    Ort
    Ulm
    Beiträge
    29
    Zitat Zitat von Mehlwurm
    aber kannst du nicht bei "else" einfach ein printf dazupacken ??
    Das wuerde ich jetzt nicht tun! Mit einem anderen Algorithmus zur Berechnung der Fibonacci-Zahlen wuerde das gehen. Mit diesem Algorithmus jedoch werden alle Werte bis auf fib(n) und fib(n-1) mehrfach (ja, viel zu haeufig) ausgegeben.

    Gruss,
    dra
    "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." -- Rich Cook

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •