Funzioni ricorsive e Fibonacci

di il
8 risposte

Funzioni ricorsive e Fibonacci

Buongiorno a tutti!

Sto facendo degli esercizi per applicare le mie conoscenze e mi sono imbattuta nelle funzioni ricorsive.

In particolare un esercizio mi ha lasciato dei dubbi: "scrivere una f.ricorsiva Fibonacci dove dato il parametro N deve ritornare il numero della sequenza che ha indice N.

 Lui lo ha risolto cosi: 

def Fibonacci(n):
   if n<=2:
       return 1
   return Fibonacci(n-1) + Fibonacci(n-2)

   Il problema è che non capisco come funziona, quali passaggi svolge e soprattutto la logica dietro … poi magari me la complico e mi sento stupida hahha

Qualcuno che mi illumini d'immenso?

8 Risposte

  • Re: Funzioni ricorsive e Fibonacci

    Perchè hai postato due volte? 

    Prova a scrivere su carta tutti i passi dell'dell'esecuzione di quel codice se lo chiami per n=3

  • Re: Funzioni ricorsive e Fibonacci

    Ho sbagliato, comunque non riesco a eliminarne uno dei due

    comunque si ho provato con 3, 4 e 5… ma non capisco cioe mi sembra un trip bho

  • Re: Funzioni ricorsive e Fibonacci

    A ok credo di esserci

    fa due cicli alla volta e poi somma i risultati giusto?

    pero sono cicli composti tipo ad albero ciclico, non so come dire

    grazie mille comunque @oregon scrivere mi ha aiutata

  • Re: Funzioni ricorsive e Fibonacci

    Le funzioni ricorsive SEMBRANO una cosa complicata ma in realtà sono abbastanza semplici da capire. 

    Puoi iniziare dal ‘principio di induzione’ 

    se una cosa e' vera per 0 (zero) 

    E

    SE la cosa è era per N (questo e' il dato di fatto, NON LO DEVI dimostrare, TI VIENE DETTO che e' vero) e si puo'dimostrare che e' vera per N +1

    ALLORA

    questa cosa e' vera per OGNI N. 

    Dove N e' un numero intero positivo.

    https://it.m.wikipedia.org/wiki/Principio_d%27induzione

    Se ci ragioni qualche se secondo, ti renderai conto che ha senso:

    1. e' vera per 0 (questo deve essere controllato SENZA USARE il principio di induzione) 
    2. poiche' e' vera per 0, per il PdI e' vera per 1
    3. poiche e' vera per 1, per il PdI e' vera per 2

    Nota che qui la sequenza va da 0 a 1,2,3,…

    Altro esempio superclassico, il FATTORIALE:

    fact(n) = 1*2*3*…*(n-1)*n

    Per convenzione

    fact(0) vale 1

    fact(1) vale 1

    ora fact(n) lo puoi definire in modo ricorsivo come:

    fact(n) =fact(n-1)*n

    Ma quanto vale fact(n-1)?

    fact(n-1) = 1*2*3*…*(n-1)

    che moltiplicato per n ritorna ESATTAMENTE la formula iniziale.

    Il ‘trip’ consiste in questo:

    devo calcolare la funzione di un numero grande. 

    Ok, ‘spiezzo’ il calcolo in 2 parti, una parte che usa la stessa funzione su un numero un po' piu' piccolo, generalmente di 1 ma in certi casi si puo' fare di meglio, ed il resto. 

    Ora chiamo la funzione sul numero piu' piccolo e rifaccio lo stesso ragionamento. 

    Attenzione, qui' c'e' il ‘trucco' : ma se continuo a fare lo stesso lavoro su numeri SEMPRE PIU' PICCOLI, QUANDO mi fermo? 

    Serve il caso che si chiama ‘base della ricorsione’ dove NON USO LA FUNZIONE ricorsiva (la stessa cosa di 0 per il PdI) 

    Per il fattoriale e' 

    fact(0) e fact(1)

    Nota che qui la sequenza e' all'incontrario:

    n, n-1,…,3,2,1,0

    Il che ha senso perche' in questo caso vogliamo DIMOSTRARE che una certa cosa e' valida per n SUPPONENDO che dia valida per n-1, ma che dobbiamo ancora controllare. 

    Si poteva ragionare stile PdI? Cioe' pretendo da 0?

    Cetamente SI ed e' esattamente quello che si fa con i cicli. 

    Ma allora si possono usare i cicli per calcolare le funzioni ricorsiva senza farsi di ‘acido’?

    Assolutamente SI, MA molto spesso la definizione ricorsiva puo' risultare estremamente piu' semplice da scrivere che non mediante i cicli, soprattutto quando l'oggetto coinvolto non e' una ‘sequenza’, come nei casi visti sopra, MA un struttura ad ‘albero’ come, ad esempio, il filesystem del computer

  • Re: Funzioni ricorsive e Fibonacci

    15/04/2024 - migliorabile ha scritto:


    Le funzioni ricorsive SEMBRANO una cosa complicata ma in realtà sono abbastanza semplici da capire

    Grazie mille adesso mi è più chiaro… gentilissimo come sempre

  • Re: Funzioni ricorsive e Fibonacci

    NON QUOTARE ‘l’ intero post, non serve.

    In genere si quotano SOLO frasi o piccole sezioni. 

  • Re: Funzioni ricorsive e Fibonacci

    Per cominciare a capire meglio la ritorsione devi avere chiaro il concetto di stack e il suo uso da parte delle funzioni

  • Re: Funzioni ricorsive e Fibonacci

    Un altro modo per capirlo che secondo me potrebbe rendere meglio l'idea in questo caso è scriverti le operazioni magari tipo “diagrammino” cosi vedi che in pratica non si tratta altro che di espandere ad ogni giro il valore di Fibonacci n ad n-1 ed n-2 se n è maggiore di due. Per esempio per Fibonacci(5) :

                                                                                                              Fibonacci(5)=

                                                               =Fibonacci(4)                                +                     Fibonacci(3) =
                          =  [Fibonacci(3)                       +        Fibonacci(2)]          +      [Fibonacci(2) + Fibonacci(1)] =
          = [Fibonacci(2) + Fibonacci(1)]             +                     1                  +               1            +        1 =
          =          1            +            1                      + 3 = 5

    in pratica Fibonacci(5) vale Fibonacci(4) + Fibonacci(3), ma Fibonacci(4)  vale  Fibonacci(3) + Fibonacci(2) e così via finche hai arrivi a Fibonacci(2) o Fibonacci(1) che valgono 1.

Devi accedere o registrarti per scrivere nel forum
8 risposte