fib in c?

... komplette Frage anzeigen

3 Antworten

Zuerst einmal ein paar grundlegende Dinge:

  • Die Variable n ist nicht nötig, denn dafür ist in einer Schleife die Variable i zuständig, die ohnehin erhöht wird.
  • Die Variable i sollte einen möglichst kleinen Gültigkeitsbereich besitzen und somit im Schleifenkopf definiert und initialisiert werden.
    Also so: for(int i=0; i<50; i++){ ... }
  • In der Funktion fib_rec() sollte für die return-Anweisung keine weitere Variable definiert werden, sie ist unnötig.
    Schreibe einfach: return fib_rec(n-1) + fib_rec(n-2)
  • Es wird wohl kaum die Fibonaccifolge von einer Zahl > ~32.000 benötigt. Deshalb sollte als Übergabeparameter nicht der Datentyp Long, sondern der Datentyp Integer benutzt werden.
  • Die Anweisung if(n >= 2){ ... } ist nicht nötig - sollte n < 2 sein, wird die Funktion durch eine return-Anweisung ohnehin schon vorzeitig verlassen.

Eigentlich sollte dein Code trotz dieser "Unschönheiten" funktionieren - was wird denn ausgegeben?

LG Willibergi

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Willibergi
27.03.2016, 19:07

EDIT: 

Dein Fehler liegt hier:

fib_rec(n)

Die Fibonacci-Zahl von n wird berechnet und zurückgegeben, verliert sich aber im nichts, weil sie nirgends gespeichert wird.

Deshalb werden dir in der Konsole, nehme ich an, auch nur die Zahlen von 0 bis 49 ausgegeben, oder?

Wenn, dann müsstest du es folgendermaßen machen:

printf("%i", fib_rec(i))

Du könntest auch in der Funktion fib_rec die Werte ausgeben lassen.

Dein Fehler lag also darin, dass der Wert, der durch die Funktion zurückgegeben wurde, nirgends gespeichert wird.

Ich hoffe, ich konnte dir helfen.

LG Willibergi

1
Kommentar von Willibergi
27.03.2016, 19:54

Ja, das ist das Problem bei rekursiven Funktionen.
Deshalb würde ich eine solche Berechnung auch eher iterativ durchführen.
LG Willibergi

0

fib_rec(n);

Da n nur ein call-by-value Parameter ist und in der Funktion fib_rec ohnehin nie geändert wird, tut diese Zeile absolut gar nichts.

Antwort bewerten Vielen Dank für Deine Bewertung

Was soll die Funktion denn erreichen?  Was genau wird hier berechnet? 

fib= fib_rec(n-1) + fib_rec(n-2);

Und wieso deklarierst du int i? es wird in der For schleife doch schon gemacht.

Was ist die Ausgabe die du bekommst und wie sollte sie aussehen?

Sicher das du nicht anstatt fib_rec(n), fib_rec(i) aufrufen willst?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Alinchen24
27.03.2016, 18:13

naja in der Funktion die ich gegeben habe stand das er fib(n-1) + fib(n-2) rechnen sollte^^ ausgaben sind 0,1,1,2,3,5,8,13 usw. (Fibonacci Folge) :)

0

Was möchtest Du wissen?