Serie di Fibonacci in C++

#include <iostream>

using namespace std;

int main()
{
    int num1 = 0;
    int num2 = 1;
    int num_temp;
    int num_next = 1;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        cout << num_next << "  ";
        num_next = num1 + num2;
        num1 = num2;
        num_temp = num2;
        num2 = num_next - num1;
        num1 = num_temp;
    }
    return 0;
}

Devo uscita la prima “n” numeri di fibonacci, tuttavia penso che ci sia qualche problema di logica.. non riesco a scoprire che cosa sto facendo di sbagliato. I primi 3 o 4 elementi sono corrette, ma poi si verifica un problema…

PREVISTO:

Per n=9

0, 1, 1, 2, 3, 5, 8, 13, 21

Effettivo:

1 1 1 1 1 1 1 1 1

Mostrare ciò che si ottiene. Errore? Il numero sbagliato?
Ho sbagliato numero..
Fornire dovrebbe e reale in uscita.
avete qualche extra non necessari passaggi troppo.
Perché sottraendo? La sequenza di Fibonacci è tutto aggiungendo.

OriginaleL’autore user2943407 | 2013-10-31

13 risposte

  1. 5
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int num1 = 0;
        int num2 = 1;
        int num_temp;
        int num_next = 1;
        int n;
        cin >> n;
        if (n>=1)
            cout << 0 << " ";
        if (n>=2)
            cout << 1 << " ";
        for (int i = 0; i < n-2; i++){
            num_next = num1 + num2;
            cout << num_next << " ";
            num1 = num2;
            num2 = num_next;
        }
        cout << endl;
        return 0;
    }
    Perché il programma di evitare il fib numero 0, ho provato impostando il num_next a 0, ma il risultato è sbagliato.
    non stampare il primo e secondo numero in elenco all’interno del ciclo. perché queste sono le startup. stampa il 1 ° e il 2 ° numero prima che il ciclo come ho fatto io. non il mio codice di produrre l’elenco corretto??
    ops, extra cout comando. Ho aggiornato.
    Il codice uscite 11 valori per n=9… penso che deve partire dal 2 per essere corretto, o di andare a n-2?
    Ora si parte da 1 2 3 5 8 13 21 ecc per n=9.

    OriginaleL’autore hasan

  2. 3

    Invece, provare questo. E ‘un po’ di un altro, ma si fa lo stesso.

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
       int input(0), Alpha(0), Beta(1), Total(1);  
       cout << "Please input a top number: "; 
       cin >> input; 
    
       for(int i = 0; i <= input; i++)
       {
          cout << Total << endl; 
          Total = Alpha + Beta; 
          Alpha = Beta;
          Beta = Total; 
       }
    } 

    OriginaleL’autore Brian

  3. 2

    La Sequenza di Fibonacci è {0, 1, 1, 2, 3, … N – 1, N, 2N – 1}.

    Al fine di implementare, è necessario disporre di un N - 2 variabile, e un N - 1 variabile, in modo che si può calcolare N = (N - 2) + (N - 1):

    unsigned int count = 0;
    std::cin >> count;
    //assume count >= 2
    unsigned int prev2 = 0;
    unsigned int prev1 = 1;
    
    std::cout << prev2 << " " << prev1 << " ";
    for (unsigned int i = 2; i < count; ++i)
    {
        unsigned int current = prev2 + prev1;
        prev2 = prev1;
        std::cout << current << " ";
        prev1 = current; 
    }
    std::cout << std::endl;
    Secondo Wikipedia, il primo numero di Fibonacci è 0. en.wikipedia.org/wiki/Fibonacci_number
    In genere lo 0 è lasciato fuori quando si scrive, ma se insisti …

    OriginaleL’autore Zac Howland

  4. 2

    Questa è la mia versione.

    È più o meno lo stesso del precedente esempi, ma ho voluto mostrare l’uso di buffer circolare.

    //Study for algorithm that counts n:th fibonacci number
    //Fibonacci[1] == 1 and Fibonacci[2] == 1 (and Fibonacci[0] == 0)
    //Fibonacci[n] = Fibonacci[n-1] + Fibonacci[n-2]                      
    
    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    
    int main(int argc, const char* argv[])
    {
    
      //not counting trivial Fibonacci[0]
      if(argc != 2 || atoi(argv[1]) < 1){
        std::cout << "You must provide one argument. Integer > 0" << std::endl;
        return EXIT_SUCCESS;
      }
    
      //ring buffer to store previous two fibonacci numbers, index it with  [i%2]
      //seeded with Fibonacci[1] and Fibonacci[2]
      //if you want to count really big fibonacci numbers, you have to make your own type for
      //buffer variable
      //this type overflows after [93] with my macbook
      unsigned long long int buffer[2]={ 1, 1 };
    
      //n:th Fibonacci                                                             
      unsigned int fn = atoi(argv[1]);
    
      //count loop is used if seeked fibonacci number is gt 2                      
      if(fn > 2){
        for(unsigned int i = 2; i < fn; ++i){                                
          buffer[i%2] = buffer[(i-1)%2] + buffer[(i-2)%2];
        }
      }
    
      //Result will be send to cout                                                
      std::cout << "Fibonacci[" << fn << "] is " << buffer[(fn-1)%2] << std::endl;
      return EXIT_SUCCESS;
    }

    OriginaleL’autore Tony

  5. 1
    #include <iostream>
    using std::cout; using std::cin;
    
    int main()
    {
        unsigned int a=0u, b=1u, n;//assuming n is a positive number.
                                    //otherwise make it int instead of unsigned
                                    //and check if it's negative
        cin >> n;
    
        if(n==0)
           {return 0;}
        if(n==1)
           {cout << a; return 0;}
        cout << a << " " << b << " ";
        for(unsigned int i=2u ; i<n; i++)
        {
           b = a + b;
           a = b - a;
           cout << b << " ";
        }
        return 0;
    }

    Mette il valore successivo in ‘b’, aggiungendo gli ultimi due valori insieme. ‘a’ poi si fa il precedente valore b. si assume a = 3 e b = 5. Quindi il nuovo b diventeranno 8, e ‘un’ diventano 5. Questo è perché è sempre somme ultimi due numeri per ottenere il risultato del prossimo numero. La prossima operazione di somma 5 (a) e 8(correnti b) e così via…

    OriginaleL’autore user2773143

  6. 1
    #include<iostream.h>
    #include<conio.h>
    
    void main()
    { 
       clrscr();
       int arr[50],n,i;
       cout<<"Enter the no. of elements to be printed in fibonacci series : ";
       cin>>n;
       arr[0]=0;arr[1]=1;
       for(i=2;i<n;i++)
       { 
          arr[i]=arr[i-1]+arr[i-2];         
       }
       cout<<"\nThe fibonacii series is : "<<endl;
       for(i=0;i<n;i++)
       {
          cout<<arr[i]<<"\t";  
       }
       getch();
    }
    questo è il più semplice programma di fibonacii serie…….godere di
    Gelsomino, are you sure ?

    OriginaleL’autore jasmine sharma

  7. 1

    Di overflow dello Stack è, naturalmente, una limitazione della versione ricorsiva. Se questo non è un problema, si potrebbe anche voler prendere in considerazione una versione basata su modelli di tipo ricorsivo di Fibonacci.

    #include <iostream>
    
    template <int N> int Fib(){ return Fib<N-1>() + Fib<N-2>(); }
    template <> int Fib<1>() { return 1; }
    template <> int Fib<0>() { return 1; }
    
    using namespace std;
    int main()
    {
      //For the 10th Fibbonacci number...
      cout << Fib<10>() << endl;
      return 0;
    }

    OriginaleL’autore Daniel Beale

  8. 0

    Bene, sto cercando qualche soluzione ricorsiva per fare la stessa operazione, quello che la maggior parte della gente è, scrivere una funzione ricorsiva per la ricerca di n-esimo numero di Fibonacci, e poi nel programma principale, eseguire un ciclo di n volte, e la chiamata a questa funzione ricorsiva con valori da 1 a n per ottenere tutti gli n numeri di Fibonacci e la loro stampa, che è un grande overhead.

    Qui è una soluzione che fa lo stesso compito, ma le chiamate di funzione ricorsiva solo una volta per sempre tutti fino a n numeri di Fibonacci, e li memorizza in un array, e quindi stampa. Che è ((n-1)*(chiamata ricorsiva overhead)) volte più veloce rispetto a quello che ho citato prima. Pollice in su se ti aiuta 🙂

    #include<iostream>
    using namespace std;
    int *arr;
    int iter = 0;
    int len;
    int returnValue;
    void exist(int num, int arr[] ) /* this function checks if the Fibonacci number that recursive function have calcuated is already in the array or not, mean if it is already calculated by some other recursive call*/
    {
        bool checkExistance = false; /* if this is true, means this Fibonacci number is already calculated and saved in array, so do not save it again*/
        returnValue = num;
        for (int i = 0; i< len; i++)
        {
            if(arr[i]==num)
            {
                checkExistance = true;
                break;
            }
        }
        if(!checkExistance)
        {
            arr[iter]=num;
            iter++;
        }
    }
    int fibonacci(int n)
    {   
        if (n==1)
        {
            exist(1,arr);
            return 1;
        }   
        else if (n==2)
        {
            exist(1,arr);
            return 1;
        }
        else
        {
            exist((fibonacci(n-1)+fibonacci(n-2)),arr);
            return returnValue;
        }
    }
    int main()
    {
        int n;
        cout<<"Enter the number of Fibonacci you want to print: ";
        cin>>n;
        len = n;
        arr = new int[n];
        fibonacci(n);
        arr[n-1] = 1;
        cout<<"1:\t"<<arr[n-1]<<endl;
        for (int i = 0; i< len-1; i++)
        {
            cout<<i+2<<":\t"<<arr[i]<<endl;
        }
        return 0;
    }

    OriginaleL’autore Zohaib

  9. 0
    #include <iostream>
    
    using namespace std;
    
    int main()
    
    {
    
        int num1 = 0, num2 = 1 , num_next = 1, n;
    
            cout << "enter a number: \n";
            cin >> n;
            //for when a negative value is given
            while(n < 0)
            {
                cout << "ERROR\n";
                cin >> n;
             }
             //when any positive number (above 1 is given)
            if (n > 0)
            {
                //to give the value of 0 without ruining the loop
                cout << num1 << " ";
                for (int i = 0; i < n; i++)
                {
                    //the Fibonacci loop
                    cout << num_next << " ";
                    num_next = num1 + num2;
                    num1 = num2;
                    num2 = num_next;
                }
            }
            //for when 0 is the given value
            else if (n == 0)
                cout << n << " ";
        return 0;
    }
    Grazie per la modifica stava avendo un momento difficile trovare un Malato deve praticare di più, così posso continuare a contribuire a questa grande comunità

    OriginaleL’autore yrubin07

  10. 0

    Ecco una soluzione senza una variabile temp:

    #include <iostream>
    using namespace std;
    
    int main()
    {
      int n0 = 0;
      int n1 = 1;
      int n;
    
      cout << "Prints first N in Fibonacci series. Please enter a number for N:  ";
      cin >> n;
    
      for(int i = 0; i < n; i++) {
        cout << n0 << " ";
        n1 = n0 + n1;
        n0 = n1 - n0;
      }
    }

    Anche un (coda) soluzione ricorsiva:

    #include <iostream>
    using namespace std;
    
    void fib(int n, int n0, int n1) {
     if(n <= 0) {
        return;
      } else {
        cout << n0 << " ";
        fib(n-1, n1, n0 + n1);
      }
    }
    
    int main()
    {
      int n;
    
      cout << "Prints first N in Fibonacci series. Please enter a number for N: ";
      cin >> n;
    
      fib(n, 0, 1);
    }

    OriginaleL’autore Felix Livni

  11. 0
    /* Author: Eric Gitangu
       Date: 07/29/2015
       This program spits out the fibionacci sequence for the range of 32-bit numbers
       Assumption: all values are +ve ; unsigned int works here
    */
    #include <iostream>
    #include <math.h>
    #define N pow(2.0,31.0)
    
    using namespace std;
    
    void fibionacci(unsigned int &fib, unsigned int &prevfib){
        int temp = prevfib;
        prevfib = fib;
        fib += temp;
    }
    void main(){
        int count = 0;
        unsigned int fib = 0u, prev = 1u;
    
        while(fib < N){
            if( fib ==0 ){
                fib = 0;
                cout<<" "<< fib++ <<" \n ";
                continue;
            }
            if( fib == 1 && count++ < 2 ){
                fib = 1;
                cout<< fib <<" \n ";
                continue;
            }
            fibionacci(fib, prev);
            cout<< fib <<" \n ";
        }
    }
    Mi scuso, è alla ricerca di una soluzione ricorsiva, la mia soluzione non è ricorsiva, ma è solo un altro approccio è possibile dare un’occhiata 🙂

    OriginaleL’autore Eric Gitangu

  12. 0

    Così… Heres una soluzione del problema”, Se si desidera una specifica sequenza di Fib.”

    #include <iostream>
    using namespace std;
    int fibonacciSeq(int k)
    {
        int num1=1;
        int num2=1;
        int count;
        for(int i=0; i<k; i++)
        {
            if(i==1)
            count=1;
            else
            {
                count=num1+num2;
                num1=num2;
                num2=count;
            }
        }
        return count;
    }

    OriginaleL’autore Smity

  13. 0

    Come su un altro sguardo a una soluzione ricorsiva:

    void fibonacci(int n1, int n2, int numCount)
    {
      --numCount;
    
      if (numCount > 0)
      {
        cout << n1 << ", ";
        fibonacci(n2, n1 + n2, numCount);
      }
      else
        cout << n1 << endl;
    }

    Quindi si potrebbe chiamare:

    enterint fNum;
    cout << "Enter a non negative number to print output fibonacci sequence: ";
    cin >> fNum;
    
    fibonacci(0, 1, fNum);

    Esempio di output:

    Serie di Fibonacci in C++

    OriginaleL’autore RooiWillie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *