Dubbio ricorsione

di il
5 risposte

Dubbio ricorsione

Ciao a tutti, ho appena iniziato a studiare la ricorsione ma ho un dubbio su due codici diversi.

Calcolo del fattoriale di un numero
long fact(int n)
{
    if(n==0)
        return(1);
    else
        return(n*fact(n-1));
}


Calcolo del massimo comun divisore tra due numeri
int gcd (int m, int n)
{
    if(n == 0)
        return(m);
    return(gcd(n,m%n));
}
Quello che non capisco è perchè la funzione del massimo comun divisore, una volta restituito m quando il resto della divisione è 0 finisce l'esecuzione mentre quella del fattoriale torna alle chiamate precedenti.
Spero di essere stato chiaro,
Grazie.

5 Risposte

  • Re: Dubbio ricorsione

    Non ho capito la domanda ... ti faccio notare che il secondo codice è come se fosse
    
    int gcd (int m, int n)
    {
        if(n == 0)
            return(m);
        else
            return(gcd(n,m%n));
    }
    quindi del tutto simile al primo
  • Re: Dubbio ricorsione

    Nel programma del massimo comun divisore quando trova m per cui il resto è uguale a 0, esce dalla funzione e riporta il valoe nel main. Per il fattoriale quando arriva a 0, restituisce il valore alle chiamate precedenti della stessa funziona, non capisco in base a cosa succeda una cosa o l'altra
  • Re: Dubbio ricorsione

    No ... non è vero ... non ritorna al main ma alle chiamate precedenti della funzione ... come nel primo caso ...
  • Re: Dubbio ricorsione

    Sono due algoritmi differenti: quello del fattoriale usa le ricorsioni per calcolare i fattoriali più piccoli, quello del MCD si chiama Algoritmo di Euclide

    Spero che adesso ti sia più chiaro il perchè ritorna quel valore (comunque non ritorna al main ma ritorna alla chiamata precedente il valore che lo ritorna alla chiamata prima così fino al main)


    Sent from my iPhone using Tapatalk
  • Re: Dubbio ricorsione

    Ok ho capito, grazie.
Devi accedere o registrarti per scrivere nel forum
5 risposte