Fibonacci-Zahlen
-
Hallo zusammen,
ich versuche verzweifelt einen Algorithmus zur Berechnung der n-ten Fibonacci-Zahl in C++ nachzubauen. Das Original-Skript in Scheme habe ich von hier: ([url] http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.2 [/url]).Leider funktioniert mein Nachbau nicht und ich habe leider nicht genug C++ Erfahrung, um den Fehler zu finden. Könnt ihr bitte mal drüber schauen? Das Programm läßt sich zwar kompilieren - bricht aber ab, ohne eine (für mich erkennbare) Fehlermeldung.
Vielen Dank für jede Unterstützung.
Gruß Stefan
#include <iostream.h> #include <stdlib.h> int FibZahl; int fib(int EingabeZahl) { if (EingabeZahl = 0) FibZahl = 0; if (EingabeZahl = 1) FibZahl = 1; FibZahl = fib(EingabeZahl - 1 ) + fib(EingabeZahl - 2); return(FibZahl); } int main() { int EingabeZahl; cout << "Bitte Zahl eingeben : \n"; cin >> EingabeZahl; fib(EingabeZahl); cout << FibZahl << "\n"; cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"; system("PAUSE"); return 0; }
-
if (EingabeZahl = 0) FibZahl = 0; if (EingabeZahl = 1) FibZahl = 1;
du müsstest dort direkt ein return einfügen, ansonsten wird FibZahl später trotzdem ein wert zugewiesen und die rekursino geht weiter
cu todo
-
Der ist-gleich Operator in C++ ist ==
Wenn du schreibst if (x = 0), weist du x den Wert 0 zu, dann wird geschaut ob 0 implizit nach bool gecastet, ergibt false, false ungleich true, Bedingung nicht erfüllt
if (x = 1) weist x 1 zu und führt den if-Block aus.Gruß
-
Original erstellt von sja74:
**Hallo zusammen,
ich versuche verzweifelt einen Algorithmus zur Berechnung der n-ten Fibonacci-Zahl in C++ nachzubauen. Das Original-Skript in Scheme habe ich von hier: ([url] http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.2 [/url]).Leider funktioniert mein Nachbau nicht und ich habe leider nicht genug C++ Erfahrung, um den Fehler zu finden. Könnt ihr bitte mal drüber schauen? Das Programm läßt sich zwar kompilieren - bricht aber ab, ohne eine (für mich erkennbare) Fehlermeldung.
Vielen Dank für jede Unterstützung.
Gruß Stefan
#include <iostream.h> #include <stdlib.h> int FibZahl; int fib(int EingabeZahl) { if (EingabeZahl = 0) FibZahl = 0; if (EingabeZahl = 1) FibZahl = 1; FibZahl = fib(EingabeZahl - 1 ) + fib(EingabeZahl - 2); return(FibZahl); } int main() { int EingabeZahl; cout << "Bitte Zahl eingeben : \n"; cin >> EingabeZahl; fib(EingabeZahl); cout << FibZahl << "\n"; cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"; system("PAUSE"); return 0; } ```**
löse doch einfach die Rekurrenz auf => viiiiiel schneller
oder speicher zumindest die Werte zwischen!
-
Oder machs iterativ:
unsigned long Fibonacci(unsigned short n) { return (unsigned long) (1/sqrt(5)*(pow((1+sqrt(5))/2,n)-pow((1-sqrt(5))/2,n))); }
-
int fib(int n) { return n == 0 ? 0 : (n == 1 ? 1 : fib(n-1) + fib(n-2));
weiß aber nicht ob das eine Klammernpaar redundant ist ...
-
weiß aber nicht ob das eine Klammernpaar redundant ist ...
Ist es.
-
Original erstellt von Gary:
**Oder machs iterativ:unsigned long Fibonacci(unsigned short n) { return (unsigned long) (1/sqrt(5)*(pow((1+sqrt(5))/2,n)-pow((1-sqrt(5))/2,n))); } ```**
...und was soll daran iterativ sein?
-
es sollte nicht iterativ heißen, sondern explizit.
*mea culpa fuit*