Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    fattoriale in c++ funzione ricorsiva

    Salve ragazzi sono nuovo del forum, volevo chiedere aiuto su un problema relativo al c++. Sono al primo anno di ingegneria, sto studiando le funzioni ricorsive e il professore per esercizio ha dato da scrivere una funzione che faccia uso della ricorsione per calcolare il fattoriale di un numero.

    Io ho scritto:

    unsigned int factorial(int n)
    {
    if(n==0) return 1;
    int fattoriale_piu_piccolo=factorial(n-1);
    int risultato=fattoriale_piu'_piccolo*n;
    return risultato;
    }

    Il problema è che poi andando nella main e scrivendo:


    int main()

    {

    int b:
    cin>>b;
    factorial(b);

    return 0;
    }

    La funzione non mi ritorna assolutamente niente, solo il temo di esecuzione. In piu' se provo a scrivere, per controllare, cout<<risultato;

    mi escono dei numeri assurdi del tipo 847358457848734 quando il numero immesso nel cin è un 3 o 4 di cui la funzione dovrebbe calcolare il banalissimo fattoriale.

    Vi ringrazio in anticipo per le risposte

  2. #2
    Ti da risultati negativi? credo che il problema sia che quando arriva a 0 non si ferma e continua sempre a togliere 1. Prova così:
    codice:
    int factorial(int n)
    {
    if(n>1)
        return n * factorial(n-1);
    else
        return 1;
    }
    
    int main()
    {
      int b, risultato;
      cout<<"Inserire un numero intero:\n";
      cin>>b;
      risultato = factorial(b);
      cout<<risultato;
    
      return 0;
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    37
    Per calcolare il fattoriale dovresti creare un ciclo.
    Se ricordo bene il fattoriale di un numero è quel numero stesso moltiplicato per tutti i numeri interi positivi minori di quel numero.

    codice:
    int factorial(int n){
        if(n==0){
            return 1;
        }else{
            int i;
            int fattoriale = 1;
            for(i=1;i<=n;i++){
                fattoriale *= i;
                }
            return fattoriale;
            }
    }
    
    int valore;
    cout << "Inserisci un numero intero positivo" << endl;
    cin >> valore;
    cout << "Il fattoriale di " << valore << " è " << factorial(valore) << endl;
    Non ho provato se funziona ma dovrebbe andare. Fammi sapere!

  4. #4
    simcar, il professore gli ha esplicitamente chiesto di farlo usando una funzione ricorsiva :-)

  5. #5
    e pure tu hai ragione, se non lo fermo a 1 il ciclo ricorsivo non si ferma xD Grazie mille della risposta a tutti e 2, il codice che vi ho scritto sopra, tra l'altro, è praticamente lo stesso di quello che il prof ha messo nella soluzione dell'esercizio che sono appena andato a vedere. Questo vuol dire che il suo libro è sbagliato e grazie a voi domani gli vado a tirare le orecchie grazie ancora!!

  6. #6
    Guarda che il codice che hai postato all'inizio funziona perfettamente, l'unico problema (a parte un apostrofo di troppo e che sarebbe meglio usare gli unsigned int anche per le due variabili interne alla funzione) è che tu ti limiti a richiamare la funzione fattoriale senza stampare il valore che restituisce.
    http://ideone.com/f2xLO
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    37
    Cavolo scusate mi sono concentrato sul fattoriale e non ho notato che la funzione doveva essere ricorsiva =)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.