Fibonacci Rekursiv C#

Fibonacci rekursiv - (programmieren, Informatik)

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
public int Fibo(int n){
    if(n == 1 || a == n){
        return n;
    }
    return Fibo(n-1)+Fibo(n-2);
}
N3wR3XX0n 
Fragesteller
 09.01.2015, 18:27

Ahh ok danke. Mein Problem war, dass ich die Anweisung "fibo" als variable deklariert habe.

0
procoder42  09.01.2015, 19:18
@N3wR3XX0n

A) Du hast das Semikolon bei der Rückgabe von n vergessen B) Du hast das System der Rekursion nivht ganz verstanden, du musst natürlich auch etwas zurückgeben, damit rückwärts wieder eingesetzt werden jann, wenn der Basis fall eintritt

0
procoder42  09.01.2015, 19:19

Statt a == n muss es natürlich n == 2 heißen ...

0

du speicherst den wert nicht ... du führst nur die Berechnung aus ... und du returnst nich in jedem fall

procoder42  10.01.2015, 13:28

Mh, noch ein Kandidat für einen Rekursions Auffrischkurs ... Sinn der Rekursion ist, dass der Wert (im Baisfall) am Ende wieder zurückläuft (lat. recurrere). Der Code wurde wohl schlecht aus dem Internet/Buch übernommen, denn die Methode sollte in diesem Fall "fibonacci" heißen (die soll sich ja wieder aufrufen), eine Variable braucht man hier doch gar nicht (außer man will den Wert nachher speichern) ?

Eine rekursive Funktion so in den Button Listener zu packen macht schlichtweg keinen Sinn . Damit alle Beteiligten die Fehler nachvollziehen können :

  • Alle wollen hier wohl das fehlende Semikolon (;) übersehen
  • es muss "return Fibo(n-1)+Fibo(n-2);" heißen, wir wollen ja schließlich eine kaskaden Rekursion haben und der Wert soll am Ende ja wieder zurückgereicht werden ;)
  • Die fibonacci Methode sollte von dem Listener gekapselt werden : Wenn man sonst (wie oben) Rekursion anwenden würde, würde man die Button Funktion ja immer wieder neu Aufrufen. Richtig wäre es, wenn man einfach einen Funktionsaufruf von fibonacci ( fibonacci(5) oder so) in den Listener packt.

Damit das System hinter einer Rekursion von allen verstanden wird, hier ein Beispiel :

fibonacci(3)  = fibonacci(2) + fibonacci (1)                
fibonacci(2)  = fibonacci(1) + fibonacci(0)     
fibonacci(1)  = 1       
fibonacci(0)  = 0           

fibonacci(2)  = 1 + 0 = 1   
fibonacci(3)  = 1 + 1 = 2       
=>fibonacci(3)= 2       

Da die Fibonacci Folge 0 1 1 2 3 5 8 ... geht,  
sollte das Ergebnis stimmen 
0