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*


Anmelden zum Antworten