Sei sulla pagina 1di 14

Ricorsione

Rosario Culmone

- p. 1/13

Induzione e Ricorsione

Spesso utilizzeremo le denizioni induttive. Sono forme di denizione compatte che descrivono un numero innito di elementi. I contesti di utilizzo sono molteplici s in matematica (fattoriale, successioni, ...) s in informatica (ricorsione, grammatiche, ...) s in musica (Bach, Corelli, ...) s in geometria (frattali, chiocciole, ...) s in pittura (Escher, ...) Le denizioni induttive sono anche chiamate costruttive o per induzione strutturale per mettere in evidenza che tali denizioni si applicano ad oggetti che hanno una ben determinata struttura che iterata produce strutture simili.

- p. 2/13

Ricorsione

In informatica spesso viene utilizzato il termine ricorsione per indicare una denizione induttiva ovvero loggetto che si vuole denire compare anche nellespressione che vuole denirlo. La ricorsione mette in evidenza la struttura della denizione mediante due parti: s Base. Il pi piccolo elemento descrivibile s Induzione. Tutti gli altri elementi mediante costruzione.

- p. 3/13

Fattoriale

La funzione fattoriale si applica ad un naturale n e produce il prodotto di tutti i naturali precedenti, compreso n. Ovvero f att(4) = 4 3 2 1. In generale f att(n) = n n 1 . . . 1. Una denizione compatta la seguente: fatt(n) = 1 se n fatt(n 1) se n=0 n>0

Si evince che una denizione ricorsiva dal fatto che a sinistra e a destra dell= compare f att. Da notare che questo fatto da solo non implica che sia una corretta denizione ricorsiva.

- p. 4/13

Fattoriale errato

E facile cadere in errore nella denizione ricorsiva. Ad esempio: fatt(n) = 1 n fatt(n) se se n=0 n>0

passo induttivo errato, oppure fatt(n) = passo base errato. 0 se n fatt(n 1) se n=0 n>0

- p. 5/13

Calcolo

La denizione ricorsiva non viene solo utilizzata solo per denire funzioni o insiemi ma pure un metodo di calcolo. Operativavamente possibile effettuare il calcolo del fattoriale effettuando delle sostituzioni: fatt(4) = 4 fatt(3) = 4 3 fatt(2) = 4 3 2 fatt(1) = 4 3 2 1 fatt(0) =43211

- p. 6/13

Operativit del calcolo

Nel caso precedente abbiamo applicato la sostituzione del caso induttivo 4 volte e del caso base 1 volta andando in profondit a cercare il caso base lasciandoci dietro il calcolo. Una volta raggiunto il caso base bisogna effettuare tutte le moltiplicazioni (possibilmente in ordine inverso se si tiene conto dellassociativit a destra). In pratica si avrebbe: fatt(4) = 4 fatt(3) = 4 3 fatt(2) = 4 3 2 fatt(1) = 4 3 2 1 fatt(0) =43211 = 4 3 2 =432 =46 = 24 (1) (2) (3) (4) (5) (6) (7) (8) (9)
- p. 7/13

Realizzazione della ricorsione

In generale nel passo induttivo possono essere richiesti calcoli molto complessi. Abbiamo quindi bisogno di: s contenitore di informazioni temporanee per ogni applicazione del passo induttivo s uno strumento a sarmonica che si gona in fase di applicazione del passo induttivo e si sgona in fase di calcolo In realt il calcolo pu essere in parte effettuato prima o dopo lapplicazione del passo induttivo. Il contenitore delle informazioni temporanee deve essere diverso per ogni fase del passo induttivo.

- p. 8/13

La pila

Lo strumento giusto per il nostro calcolo la PILA. La pila ha tre operazioni: 1. P ush(e). Loperazione P ush(e) pone in cima alla pila il contenitore e 2. P op. Loperazione P op produce quello che st in cima alla pila e lo toglie 3. Empty . Loperazione Empty produce il valore logico vero se la pila vuota. La PILA quello che normalmente utilizziamo: una pila di piatti, una pila di fogli. Il vincole che non si possono prendere fogli in mezzo alla pila.

- p. 9/13

Calcolo con la pila

fatt(4) = 4 fatt(3) = 4 3 fatt(2) = 4 3 2 fatt(1) = 4 3 2 1 fatt(0) =43211 =4321 =432 =46 = 24

P ush(4) P ush(3) P ush(2) P ush(1) P ush(1) P ush(P op P op) P ush(P op P op) P ush(P op P op) P ush(P op P op)

- p. 10/13

Ricorsione e Pila

In generale la PILA pu essere utilizzata per qualsiasi funzione ricorsiva denita con base e induzione correttamente espresse. Si deve tenere conto di: s Si devono correttamente denire le operazioni da effettuare nella fase discendente e le operazioni da effettuare nella fase ascendente. s Nella fase discendente si effettuano solo operazioni Push, nella fase ascendente solo operazioni Pop. s Ci che si mette sulla pila il contesto o lambiente dellapplicazione del passo induttivo. s Ci che viene effettuato con il prodotto dei Pop il calcolo da effettuare dellapplicazione del passo induttivo.

- p. 11/13

Linguaggi di programmazione e Ricorsione

La ricorsione utilizzata: s nelle denizioni delle grammatiche dei linguaggi di programmazione s in strutture dati utilizzate correntemente dai linguaggi di programmazione (liste, code, pile, alberi, graf i, . . . ) s negli algoritmi di ordinamento (quicksort, naturaljoin, . . . ) s negli algoritmi che gestiscono strutture dati denite ricorsivamente s in generale in tutti i contesti dove possibile descrivere in modo induttivo Si considere che la ricorsione molto potente, elegante e compatta ma dispendiosa dal punto di vista computazionale.

- p. 12/13

Ricorsione ed espressioni regolari

La ricorsione applicabile con successo nel riconoscimento dei stringhe espresse mediante espressioni regolari. La denizione delle espressioni regolari data in modo induttivo: 1. { } unespressione regolare 2. se a allora a unespressione regolare 3. una etichetta L unespressione regolare 4. se L ed M denotano espressioni regolari allora L|M unespressione regolare 5. se L ed M denotano espressioni regolari allore LM unespressione regolare 6. se L denota unespressione regolare allora L unespressione regolare 7. se L denota unespressione regolare allora (E ) unespressione regolare

- p. 13/13

Denizione ricorsiva

a L(E ) L(F ) L(E ) = L(E )L(F ) L(E ) L(

se se se se se

E E E E E

= = E |F = EF = E

- p. 14/13