Bitte nutze für Code den "Code-Tag", damit ist es übersichtlicher zu lesen.
Also ehrlich gesagt, habe ich mir das bereits durchgelesen und dort steht ja auch
" return fibonacci_intern( fib-1 ) + fibonacci_intern( fib-2 );"
, ich bin davon ausgegangen, die Funktion für Werte unter 2 nicht definieren zu müssen, da es ja erst bei der Fibonacci-Zahl 5 beginnen soll .. hmm
Der Computer und der Compiler besitzen keine Intelligenz, man kann fast sagen, dass diese wunderwerke der Technik unheimlich dumm sind. Sie machen nur genau das, was du programmiert hast. Sie machen aber
nicht das, was du möchtest. Daher musst du genau darauf achten, dass das was du Programmierst auch das ist, was du willst.
Weiterhin ist die Funktion über den Wertebereich der Eingangsvariablen definiert, aber es kommt nicht immer etwas sinnvolles dabei heraus.
Schauen wir uns doch mal deine Funktion an:
Code: Alles auswählen
int fib(int n)
{
int ergebnis;
while (n<=30)
{
ergebnis= (n-1)+(n-2);
n=n+5;
return ergebnis;
}
}
Du hast dort ein "while(n <= 30)", dies gehört aber nicht in eine Funktion, die Fibonacci zahlen berechnet. Die Schleife wird zudem auch nur ein mal ausgeführt, da mit dem "return ergebnis" die Funktion beendet wird. Gibst du z.B n = 5 hinein, erhälst du 4+3=7 als Ergebnis, dies ist aber nicht eine Fibonacci Zahl.
Wenn du dir das Tutorial nochmal genau durchliest, siehst du, dass der Code für die Fibonacci Folge wie folgt aussieht:
Code: Alles auswählen
unsigned int fibonacci( unsigned int fib )
{
if ( fib == 0 ) return 0;
else if( fib == 1 ) return 1;
else return fibonacci( fib-1 ) + fibonacci( fib-2 );
}
Es gibt weder ein while noch eine Variable, sondern es wird über Rekursion gearbeitet. Der entscheidende Schritt ist aber, dass du eine Abbruchbedingung für die Rekursion hast, nämlich genau dann, wenn du die nullte oder erste Fibonacci-Zahl haben möchtest.
Im weiteren passt dein Code, wobei du statt einem "while" auch eine for-Schleife verwenden kannst.
Redundanz macht wiederholen unnötig.
quod erat expectandum