Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Funzione ricorsiva

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    148

    Funzione ricorsiva

    Ciao a tutti,
    sto impazzendo per capire la logica delle funzioni ricorsive, ma ancora non riesco proprio a capirla!!!
    Data la funzione:
    codice:
    function potenzaRicorsiva(base, esponente)
    {
    	if (base == 0) {return(0);}
    	else if (esponente == 0) {return(1);}
    	else {return (base * potenzaRicorsiva(base, esponente-1));}
    }
    mi potreste gentilmente spiegare come lo esegue il calcolo?
    perchè io per calcolare la potenza eseguivo un ciclo in questo modo:
    codice:
    function potenza(base, esponente)
    {
    var risultato = 1;
    
    for(i=esponente;i>0;i--){
             risultato *= base;
    }
    return risultato;
    }
    e fin qui tutto ok, la logica è chiara del calcolo, ma usando la ricorsiva non la capisco proprio!

    Grazie ciao

  2. #2
    molto semplicemente....la funzione ricorsiva richiama se stessa per eseguire i calcoli.
    nel tuo caso se l'esponente è diverso da zero ritorna la base moltiplicata per il risultato della stessa funzione calcolata con l'esponente diminuito di uno...mentre se l'esponente è 0 ritorna 1.

    Ad esempio: devi calcolare 2^2...quella funzione prende


    base = 2 - esponente = 2

    potenzaRicorsiva(2, 2):
    esponente != 0 -> esponente-1, 2*potenza(2, 1)

    potenzaRicorsiva(2, 1):
    esponente != 0 -> esponente-1, 2*potenza(2, 0)

    potenzaRicorsiva(2, 0):
    esponente = 0-> 1

    se vai a sostituire vedi che il risultato è 2*(2*(1)) = 4

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    148
    Ti ringrazio per la risposta, ma io sarò un po' lento ma non ho capito...

    prendendo base = 2 esponente = 2

    esegue la funzione 3 volte?
    potenzaRicorsiva(2, 2):
    esponente != 0 -> esponente-1, 2*potenza(2, 1)

    sarebbe 2*(2*(1))

    poi
    potenzaRicorsiva(2, 1):
    esponente != 0 -> esponente-1, 2*potenza(2, 0)

    sarebbe 2*(2*(0))

    poi
    potenzaRicorsiva(2, 0):
    esponente = 0-> 1

    questo tornerebbe a 2*(2*(1))
    e quindi il risultato?
    però così se io mettessi un cubo come esponente invece che un quadrato mi ritornerebbe sempre un quadrato, perchè non mi salva il risultato ottenuto con l'esecuzione precedente della funzione.

  4. #4
    tu praticamente richiami sempre la funzione su se stessa finchè l'esponente è diverso da zero.

    Ad esempio con il metodo iterativo tu fai un ciclo for diminuendo sempre l'esponente finchè è > 0.

    con la ricorsione tu calcoli il risultato moltiplicando la base per il risultato che hai dalla funzione calcolata con l'esponente diminuito di uno.

    Ad esempio la potenza 2^2

    il tuo risultato è:
    base = 2
    esponente-1 = 1

    base *potenza(2, 1)

    potenza(2, 1) è uguale alla base (cioè 2) moltiplicata per la funzione potenza(2, 0)

    se l'esponente è = 0 allora la funzione ti ritorna 1. quindi un passo alla volta hai

    potenza(2, 2) = 2 * potenza(2, 1) = 2 * (2 * potenza(2, 1)) = 2 * (2*1) = 2 * 2 * 1 = 4

    Se tu avessi il cubo avresti un passaggio in più cioè:

    potenza(2, 3) = 2 * potenza(2, 2) .....e vedi sopra quindi avresti 2*(2*(2*1)) = 2 * 2* 2 * 1 = 8

    sono riuscito a spiegarmi meglio???

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    148
    Grazie mille!
    Sei stato veramente esaustivo!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.