33
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Iterazione Vs Ricorsione Marco D. Santambrogio – [email protected] Ver. aggiornata al 7 Gennaio 2014

Iterazione Vs Ricorsione - Intranet DEIBhome.deib.polimi.it/santambr/dida/infob/1314/doc/PDF/12_InfoB... · DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Iterazione Vs Ricorsione Marco

Embed Size (px)

Citation preview

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Iterazione Vs Ricorsione

Marco D. Santambrogio – [email protected] Ver.  aggiornata  al  7  Gennaio  2014  

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Nota per i “7”

•  Cosa: §  Prova “colpo-singolo” § No libri, e/o appunti §  1 exe in C in 30’

•  Quando § Domani: martedì 8 Gennaio § Dalle 12.15 alle 13

•  Dove §  BL27.18

2

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Obiettivi

•  Induzione matematica •  Iterazione •  Cosa significa “ricorsivo” •  Iterazione Vs ricorsione

3

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

L’induzione matematica

•  Si usa nelle definizioni e nelle dimostrazioni

•  Definizione: numeri pari §  1) 0 è un numero pari §  2) se n è un numero pari anche n+2 è un

numero pari •  Dimostrazione: dimostro che (2n)2=4n2 (distributività della potenza di 2 risp. alla moltiplicazione)

§  1) n=1 : vero §  2) suppongo sia vero per k, lo dimostro per k

+1: (2(k+1))2=(2k+2)2=(2k)2+8k+4= (per hp di

induzione) 4k2 +8k+4 = 4(k2 +2k+1) = 4(k+1)2 §  1) è il passo base, 2) è il passo di induzione

4

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Il tacchino induttivista

•  Un tacchino induttivista viene allevato in una fattoria del Maine (USA)

•  Ogni giorno alle 7am Mr Jones porta il cibo al tacchino induttivista

•  Il tacchino segue il seguente ragionamento: §  Il giorno 1 Mr Jones mi ha portato il cibo @

7am §  Ieri era il giorno “n” e Mr Jones mi ha portato

il cibo @ 7am §  Oggi è il giorno “n+1” ed il cibo è arrivato §  Tutti i giorni @l 7am Mr Jones mi porterà il

cibo •  … Thanksgiving

5

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Iterazione e ricorsione

•  Sono i due concetti informatici che nascono dal concetto di induzione

6

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Iterazione

•  L’iterazione si realizza mediante la tecnica del ciclo

•  Il calcolo del fattoriale: §  0!=1 §  n!=n(n-1)(n-2)….1 (realizzo un ciclo)

7

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Iterazione

•  Il calcolo del fattoriale mediante una tecnica iterativa:

function [f]=fact(n) f=1; for i=1:n f=f*i; end

8

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La ricorsione

•  Dal latino re-currere §  ricorrere, fare ripetutamente la stessa

azione •  In informatica: si tratta di

procedure/funzioni che richiamano se stesse

•  Il concetto di ricorsione viene usato nel contesto di: §  algoritmi §  strutture dati

9

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

“Flusso” di lavoro

•  Il programmatore formula l’algoritmo dal generale al particolare §  Si descrivono la funzione sulla globalità

dei dati in termini della funzione stessa sui dati disgregati

•  L’algoritmo viene poi eseguito dal particolare al generale §  Vengono infatti lasciate in sospeso le

operazioni globali e il calcolo vero e proprio inizia dai dati atomici

10

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Definizione ricorsiva del fattoriale

1) n!=1 se n=0 2) n!= n*(n-1)! se n>0

§  riduce il calcolo a un calcolo più semplice §  ha senso perché si basa sempre sul

fattoriale del numero più piccolo, che io conosco

§  ha senso perché si arriva a un punto in cui non è più necessario riusare la def. 2) e invece si usa la 1)

§  1) è il passo base, 2) è il passo di ricorsione

11

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Algoritmo ricorsivo per fattoriale

function [f]=factRic(n) if (n==0) f=1; else f=n*factRic(n-1); end

•  Quando si può dire che una ricorsione è ben definita? §  Informalmente: se ogni volta che applico la

ricorsione sono significativamente più vicino al passo base, allora la definizione non è circolare.

12

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Esempio di traccia

•  Calcoliamo il fattoriale di 4: •  4=0? No: calcoliamo il fattoriale di 3 e molt. per 4 •  3=0? No: calcoliamo il fattoriale di 2 e molt. per 3 •  2=0? No: calcoliamo il fattoriale di 1 e molt. per 2 •  1=0? No: calcoliamo il fattoriale di 0 e molt. per 1 •  0=0? Si: il fattoriale di 0 è 1. Risaliamo: •  il fattoriale di 1 è 1 per il fattoriale di 0 cioè 1*1=1 •  il fattoriale di 2 è 2 per il fattoriale di 1 cioè 2*1=2 •  il fattoriale di 3 è 3 per il fattoriale di 2 cioè 3*2=6 •  il fattoriale di 4 è 4 per il fattoriale di 3 cioè 4*6=24

13

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

n:3 f:.. factRic

(1)

n:3 f:.. factRic

(2)

n:2 f:.. factRic

n:3 f:.. factRic

(3)

n:2 f:.. factRic

n:1 f:.. factRic

n:3 f:.. factRic

(4)

n:2 f:.. factRic

n:1 f:.. factRic

n:0 f:.. factRic

n:3 f:.. factRic

(5)

n:2 f:.. factRic

n:1 f:.. factRic

n:0 f:1 factRic

n:3 f:.. factRic

(6)

n:2 f:.. factRic

n:1 f:1 factRic

n:3 f:.. factRic

(7)

n:2 f:2 factRic

n:3 f:6 factRic

(8)

Ambienti locali gestiti in modo LIFO (Last In First Out) Cancellati in ordine inverso a quello un cui sono stati creati Si usa una struttura di dati detta PILA

Gestione a pila degli ambienti locali delle funzioni

14

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Altri esempi di funzioni ricorsive

•  I numeri di Fibonacci (dinamiche di popolazione)

•  Il Massimo Comun Divisore

(algoritmo di Euclide) •  Il problema delle torri di Hanoi

15

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Fibonacci

•  Leonardo Fibonacci §  Matematico italiano §  Compie numerosi viaggi e

assimila le conoscenze matematiche del mondo arabo,

§  Nel 1202 pubblica: il Liber abaci

§  Con Liber abaci si propose di diffondere nel mondo scientifico occidentale le regole di calcolo note agli Arabi •  il sistema decimale

16

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Il problema dei “conigli”

“Un tale mise una coppia di conigli in un luogo completamente circondato da un muro, per scoprire quante coppie di conigli discendessero da questa in un anno: per natura le coppie di conigli generano ogni mese un'altra coppia e cominciano a procreare a partire dal secondo mese dalla nascita.”

L. Fibonacci da Liber Abaci

17

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

I numeri di Fibonacci

Idea di base 1) fib(n)=1 se n=0 opp. n=1 2) fib(n)= fib(n-1) + fib(n-2) se n>1

18

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

I numeri di Fibonacci

1) fib(n)=1 se n=0 opp. n=1 2) fib(n)= fib(n-1) + fib(n-2) se n>1 Vengono usati per modellare la crescita di animali

per diverse generazioni

function [f]=fib (n) if n==1 | n==2 f = 1; else f = fib(n - 2) + fib(n - 1); end

19

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Il MCD

Definizione: 1) MCD(m,n)=m se m=n 2a) MCD(m,n)= MCD(m-n,n) se m>n 2b) MCD(m,n)=MCD(m,n-m) se n>m esempio: MCD(21,56) = MCD(21,35) =

MCD(21,14)= = MCD(7,14) = MCD(7,7) = 7

20

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

IL MCD

Iterativo:

function [M]=MCDeuclid(m,n) while m ~= n if m>n m=m-n; else n=n-m; end end M=m;

21

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

IL MCD

Iterativo:

function [M]=MCDeuclid(m,n) while m ~= n if m>n m=m-n; else n=n-m; end end M=m;

Ricorsivo:

function [M]=MCDeuclidRic(m,n) if m==n M=m; else if m>n M = MCDeuclidRic(m-n,n); else M = MCDeuclidRic(m,n-m); end end

•  Attenzione alla condizione di terminazione!!!!! •  N.B. è sempre possibile trovare un

corrispondente iterativo di un programma ricorsivo!!!

22

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Pausa…

23

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Un problema interessante: La torre di Brahma

24

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La leggenda

•  Narra la leggenda che all'inizio dei tempi, Brahma portò nel grande tempio di Benares, sotto la cupola d'oro che si trova al centro del mondo, tre colonnine di diamante e sessantaquattro dischi d'oro, collocati su una di queste colonnine in ordine decrescente, dal più piccolo in alto, al più grande in basso.

•  E' la sacra Torre di Brahma che vede impegnati, giorno e notte, i sacerdoti del tempio nel trasferimento della torre di dischi dalla prima alla terza colonnina.

•  Essi non devono contravvenire alle regole precise, imposte da Brahma stesso, che richiedono di spostare soltanto un disco alla volta e che non ci sia mai un disco sopra uno più piccolo.

•  Quando i sacerdoti avranno completato il loro lavoro e tutti i dischi saranno riordinati sulla terza colonnina, la torre e il tempio crolleranno e sarà la fine del mondo.

25

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Le torri di Hanoi

http://www.cs.cmu.edu/~cburch/survey/recurse/hanoi.html

Problema: spostare tutti i dischi dalla torre A alla torre B (usando la torre C come “supporto intermedio”) in modo che si trovino nello stesso ordine

26

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Le torri di Hanoi

•  Scriveremo una funzione ricorsiva che prende come parametro il numero del disco più grande che vogliamo spostare (da 0 a 5 come nel disegno)

•  La funzione prenderà anche tre parametri che indicano: §  da quale asta vogliamo partire (source), §  a quale asta vogliamo arrivare (dest), §  l’altra asta, che possiamo usare come

supporto temporaneo (spare).

27

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

L’idea di base

•  Voglio spostare n anelli dal piolo sorgente, a quello destinazione, usando come appoggio il piolo ausiliario §  Devo quindi prima spostare n - 1 anelli

dal sorgente all'ausiliario, usando come appoggio il piolo destinazione

§  Poi sposto l'unico anello rimasto dal sorgente al piolo destinazione

§  Infine sposto gli n - 1 anelli che si trovano sull'ausilliario all'anello destinazione..

28

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

L’uso della ricorsione

•  Quando si spostano gli n - 1 anelli la funzione hanoi richiama se stessa, cioè effettua una chiamata ricorsiva, semplificando però il problema perché bisogna spostare un numero di anelli inferiore.

•  In pratica, con la ricorsione il problema viene continuamente ridotto di complessità fino alla soluzione banale in cui rimane solo un anello, che viene semplicemente spostato nel piolo destinazione.

29

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Le torri di Hanoi: strategia

Ridurremo il problema a quello di spostare 5 dischi dalla torre C alla torre B, dopo che il disco 5 è stato già messo nella posizione giusta

30

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Le torri di Hanoi: pseudocodice

FUNCTION MoveTower(disk, source, dest, spare): IF disk == 0, THEN: move disk from source to dest ELSE: MoveTower(disk - 1, source, spare, dest) /* (Passo 1) */ move disk from source to dest // /

* (Passo 2) */ MoveTower(disk - 1, spare, dest, source) // /

* (Passo 3) */ END IF Nota: l’algoritmo aggiunge un caso base: quando il disco è il più

piccolo (il numero 0). In questo caso possiamo muoverlo direttamente perché non ne ha altri sopra. Negli altri casi, seguiamo la procedura descritta per il disco 5.

31

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione in codice MATLAB con simulazione

function []=hanoi(n, da, a, per) if (n>1) hanoi(n-1, da, per, a); end; fprintf('\n sposta un disco dal piolo %d al piolo %d \n', da, a); if (n>1) hanoi(n-1, per, a, da); end;

>> hanoi(3, 1, 2, 3) sposta un disco dal piolo 1 al piolo 2 sposta un disco dal piolo 1 al piolo 3 sposta un disco dal piolo 2 al piolo 3 sposta un disco dal piolo 1 al piolo 2 sposta un disco dal piolo 3 al piolo 1 sposta un disco dal piolo 3 al piolo 2 sposta un disco dal piolo 1 al piolo 2 >>

hanoi(3, 1, 2, 3)

hanoi(2, 1, 3, 2) hanoi(2, 3, 2, 1)

hanoi(1, 1, 2, 3) hanoi(1, 2, 3, 1) hanoi(1, 3, 1, 2) hanoi(1, 1, 2, 3)

32

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Fonti per lo studio + Credits

•  Fonti per lo studio §  Introduzione alla programmazione in

MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio •  Capitolo 4

–  Particolare attezione al 4.5

•  Credits §  Prof W. Fornaciari §  Prof. A. Morzenti

33