RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una...

63
RICORSIONE: DEFINIZIONI RICORSIVE RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di “oggetti” in termini di una sottoclasse degli “oggetti” stessi. Consiste di due fasi 1) BASE. Si definiscono uno o più “oggetti” 2) PASSO Induttivo. Si definiscono altri “oggetti” a partire da quelli già definiti. Es. n fattoriale: n!=1x2x…xn= prodotto dei primi n interi Definizione ricorsiva di n fattoriale, f(n): BASE. f(1)=1 PASSO. f(n)=f(n-1)Xn, per n>1 Applicando successivamente il passo induttivo a partire da f(1) otteniamo: f(2)=f(1)x2=2, f(3)=f(2)x3=2x3=6, f(4)=f(3)x4=6x4=24,…

Transcript of RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una...

Page 1: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

RICORSIONE: DEFINIZIONI RICORSIVERICORSIONE: DEFINIZIONI RICORSIVE

Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di “oggetti” in termini di una sottoclasse degli “oggetti” stessi.

Consiste di due fasi1) BASE. Si definiscono uno o più “oggetti”2) PASSO Induttivo. Si definiscono altri “oggetti”

a partire da quelli già definiti.Es. n fattoriale: n!=1x2x…xn= prodotto dei primi n interiDefinizione ricorsiva di n fattoriale, f(n):BASE. f(1)=1PASSO. f(n)=f(n-1)Xn, per n>1

Applicando successivamente il passo induttivo a partire da f(1) otteniamo:f(2)=f(1)x2=2, f(3)=f(2)x3=2x3=6, f(4)=f(3)x4=6x4=24,…

Page 2: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di n fattoriale, f(n):BASE. f(1)=1PASSO. f(n)=f(n-1)Xn

Mostriamo che la definizione data è corretta, cioè consideriamo la seguente affermazione

S(n): f(n)=n!e dimostriamo che S(n) vera per ogni n>1.

Page 3: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di n fattoriale, f(n):BASE. f(1)=1PASSO. f(n)=f(n-1)Xn

Mostriamo che la definizione data è corretta, cioè consideriamo la seguente affermazione

S(n): f(n)=n!e dimostriamo che S(n) vera per ogni n>1.

Dimostrazione per induzione.BASE. n=1. Si ha f(n)=1=1! S(1) vera

Page 4: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di n fattoriale, f(n):BASE. f(1)=1PASSO. f(n)=f(n-1)Xn

Mostriamo che la definizione data è corretta, cioè consideriamo la seguente affermazione

S(n): f(n)=n!e dimostriamo che S(n) vera per ogni n>1.

Dimostrazione per induzione.BASE. n=1. Si ha f(n)=1=1! S(1) vera

PASSO. Assumiamo come i.i. che S(n) vera (f(n)=n!). Vogliamo mostrare che S(n+1) è vera.

Page 5: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di n fattoriale, f(n):BASE. f(1)=1PASSO. f(n)=f(n-1)Xn

Mostriamo che la definizione data è corretta, cioè consideriamo la seguente affermazione

S(n): f(n)=n!e dimostriamo che S(n) vera per ogni n>1.

Dimostrazione per induzione.BASE. n=1. Si ha f(n)=1=1! S(1) vera

PASSO. Assumiamo come i.i. che S(n) vera (f(n)=n!). Vogliamo mostrare che S(n+1) è vera. Si ha

f(n+1)=f(n)x(n+1)=n!x(n+1) (per i.i.) =(1x…xn)x(n+1)=1x…x(n+1)= (n+1)!

Quindi S(n+1) è vera.

Page 6: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva dell’ordine lessicograficoDefinizione ricorsiva dell’ordine lessicografico

Definiamo in modo ricorsivo coppie di stringhe W Definiamo in modo ricorsivo coppie di stringhe W ed X tali cheed X tali che

W<X

Indichiamo con la stringa vuota.

BASE. 1. <W, per ogni stringa W non vuota 2. se c<d (c,d caratteri) allora per ogni coppia di stringhe W,X risulta

cW<dXPASSO. Date le stringhe W ed X, se W<X allora per c ogni carattere c risulta

cW<cX

Page 7: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva dell’ordine lessicograficoDefinizione ricorsiva dell’ordine lessicografico

BASE. 1. <W, per ogni W non vuota 2. se c<d cW<dX, per ogni W,X PASSO. W<X cW<cX, per ogni carattere c

Esercizio. Mostrare che se X<Y secondo la definizione ricorsiva data, allora X precede Y in ordine lessicografico. [Suggerimento: procedere per induzione sulla lunghezza del prefisso comune alle due stringhe]

Ricorda: Ordine lessicografico Data una coppia di sequenze c1c2 …ck, d1d2…dm risulta

c1c2 …ck < d1d2…dm

1) se k<m e c1=d1,…,ck=dk (la prima è l’inizio della seconda) 2) oppure c1=d1,..,ci-1=di-1, ci<di per qualche i. (ordine dato dal primo simbolo in cui le due sequenze differiscono)

Page 8: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva dell’ordine lessicograficoDefinizione ricorsiva dell’ordine lessicografico

BASE. 1. <W, per ogni W non vuota 2. se c<d cW<dX, per ogni W,X PASSO. W<X cW<cX, per ogni carattere c

Esercizio. Mostrare che se X<Y secondo la definizione ricorsiva data, allora X precede Y in ordine lessicografico. [Suggerimento: procedere per induzione sulla lunghezza del prefisso comune alle due stringhe]Affermazione S(n): Date due stringhe X,Y con prefisso comune lungo n, se X<Y allora X precede Y in ordine lessicografico

Si vuole provare che S(n) vera per ogni n>0.

Page 9: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di espressioni aritmeticheDefinizione ricorsiva di espressioni aritmetiche

BASE. Singole variabili, interi e reali sono espressioni aritmetichePASSO. Se E1 ed E2 sono espressioni aritmetiche allora

(E1+E2), (E1-E2), (E1*E2), (E1/E2), (-E1) sono espressioni aritmetiche.

Page 10: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di espressioni aritmeticheDefinizione ricorsiva di espressioni aritmetiche

BASE. Singole variabili, interi e reali sono espressioni aritmetichePASSO. Se E1 ed E2 sono espressioni aritmetiche allora

(E1+E2), (E1-E2), (E1*E2), (E1/E2), (-E1) sono espressioni aritmetiche.

Es. (y*(-(x+9)) è una espressione aritmetica.

Page 11: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di espressioni aritmeticheDefinizione ricorsiva di espressioni aritmetiche

BASE. Singole variabili, interi e reali sono espressioni aritmetichePASSO. Se E1 ed E2 sono espressioni aritmetiche allora

(E1+E2), (E1-E2), (E1*E2), (E1/E2), (-E1) sono espressioni aritmetiche.

Es. (y*(-(x+9)) è una espressione arirmetica.

Verifica: Usando la BASE: x,y e 9 sono espressioni aritmetiche

Page 12: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di espressioni aritmeticheDefinizione ricorsiva di espressioni aritmetiche

BASE. Singole variabili, interi e reali sono espressioni aritmetichePASSO. Se E1 ed E2 sono espressioni aritmetiche allora

(E1+E2), (E1-E2), (E1*E2), (E1/E2), (-E1) sono espressioni aritmetiche.

Es. (y*(-(x+9)) è una espressione arirmetica.

Verifica: Usando la BASE: x,y e 9 sono espressioni aritmetiche

Usando il PASSO: x e 9 sono e.a. (x+9) è e.a.

Page 13: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di espressioni aritmeticheDefinizione ricorsiva di espressioni aritmetiche

BASE. Singole variabili, interi e reali sono espressioni aritmetichePASSO. Se E1 ed E2 sono espressioni aritmetiche allora

(E1+E2), (E1-E2), (E1*E2), (E1/E2), (-E1) sono espressioni aritmetiche.

Es. (y*(-(x+9)) è una espressione arirmetica.

Verifica: Usando la BASE: x,y e 9 sono espressioni aritmetiche

Usando il PASSO: x e 9 sono e.a. (x+9) è e.a.Usando il PASSO: (x+9) è e.a. (-(x+9)) è e.a.

Page 14: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Definizione ricorsiva di espressioni aritmeticheDefinizione ricorsiva di espressioni aritmetiche

BASE. Singole variabili, interi e reali sono espressioni aritmetichePASSO. Se E1 ed E2 sono espressioni aritmetiche allora

(E1+E2), (E1-E2), (E1*E2), (E1/E2), (-E1) sono espressioni aritmetiche.

Es. (y*(-(x+9))) è una espressione arirmetica.

Verifica: Usando la BASE: x,y e 9 sono espressioni aritmetiche

Usando il PASSO: x e 9 sono e.a. (x+9) è e.a.Usando il PASSO: (x+9) è e.a. (-(x+9)) è e.a.

Usando il PASSO: y e (-(x+9)) e.a. (y*(-(x+9))) è e.a.

Page 15: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

FUNZIONI RICORSIVEFUNZIONI RICORSIVE

All’interno della funzione P c’è una chiamata a P (su input diverso).

Page 16: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

FUNZIONI RICORSIVEFUNZIONI RICORSIVE

All’interno della funzione P c’è una chiamata a P (su input diverso).

Funzioni ricorsive Definizioni ricorsive

Es. Calcolo di n! usando la definizione ricorsiva di fattoriale.

Base. 1!=1 Passo. n!= (n-1)! X n

Page 17: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

FUNZIONI RICORSIVEFUNZIONI RICORSIVE

All’interno della funzione P c’è una chiamata a P (su input diverso).

Funzioni ricorsive Definizioni ricorsive

Es. Calcolo di n! usando la definizione ricorsiva di fattoriale.

Base. 1!=1 Passo. n!= (n-1)! X n

Int fact(int n){ if(n<=1) return 1 /*Base*/ else return n*fact(n-1); /*Passo*/}

Page 18: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Int fact(int n){ if(n<=1) return 1 /*Base*/ else return n*fact(n-1); /*Passo*/}

n=1: fact(1) termina e restituisce 1!=1

Page 19: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Int fact(int n){ if(n<=1) return 1 /*Base*/ else return n*fact(n-1); /*Passo*/}

n=1: fact(1) termina e restituisce 1!=1

chiaman=2: fact(2) fact(1) 1

Page 20: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Int fact(int n){ if(n<=1) return 1 /*Base*/ else return n*fact(n-1); /*Passo*/}

n=1: fact(1) termina e restituisce 1!=1

chiaman=2: fact(2) fact(1) 1

chiama chiama n=3: fact(3) fact(2) fact(1) 2 1

Page 21: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Int fact(int n){ if(n<=1) return 1 /*Base*/ else return n*fact(n-1); /*Passo*/}

n=1: fact(1) termina e restituisce 1!=1

chiaman=2: fact(2) fact(1) 1

chiama chiama n=3: fact(3) fact(2) fact(1) 2 1

chiama chiama chiama

n: fact(n) fact(n-1) … fact(1) (n-1)! (n-2)! 1

Page 22: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

SelectionSort RICORSIVOSelectionSort RICORSIVO

Idea alla base del SelectionSort: Array A diviso in due parti

A[0..i-1] ordinato A[i..n-1] elementi più grandi da

ordinare 1. Trova min A[i..n-1], sia A[small] Scambia A[i] ed A[small]2. Ordina la parte non ordinata, cioè A[i+1..n-

1]

Page 23: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

SelectionSort RICORSIVOSelectionSort RICORSIVO

Idea alla base del SelectionSort: Array A diviso in due parti

A[0..i-1] ordinato A[i..n-1] elementi più grandi da

ordinare 1. Trova min A[i..n-1], sia A[small] Scambia A[i] ed A[small]2. Ordina la parte non ordinata, cioè A[i+1..n-

1]BASE. Se i=n-1, la parte da ordinare è A[n-1], ok.PASSO. Se i<n-1, trova min A[i..n-1], scambialo con A[i]; ordina (ricorsivamente) A[i+1..n-1]

Page 24: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

SelectionSort RICORSIVOSelectionSort RICORSIVO

void Rec- SelectionSort(int A[], int i, int n)int j,small,temp;{ if (i<n-1) /* Base: i=n-1, Esci*/ { /*Esegui Passo*/

small=i;for(j=i+1, j<n,j++) if (A[j]<A[small])

small=j; /*trova min*/

temp=A[small]; A[small]=A[i]; A[i]=temp; /*scambia*/

Rec-SelectionSort(A,i+1,n) }}

BASE. Se i=n-1, la parte da ordinare è A[n-1], ok.PASSO. Se i<n-1, trova min A[i..n-1], scambialo con A[i]; ordina (ricorsivamente) A[i+1..n-1]

Page 25: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

BASE. fib(0)=fib(1)=1;PASSO. fib(n)=fib(n-1)+fib(n-2)

Page 26: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

BASE. fib(0)=fib(1)=1;PASSO. fib(n)=fib(n-1)+fib(n-2)

int Fib (int n){ if (i<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

Page 27: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (i<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

n=0, oppure n=1: restituisce 1

Fib(1) n=2: Fib(2)

Page 28: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (i<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

n=0, oppure n=1: restituisce 1

Fib(1) n=2: Fib(2) Fib(0)

Page 29: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (i<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

n=0, oppure n=1: restituisce 1

Fib(1) n=2: Fib(2) Fib(0)

Fib(1) Fib(2)

n=3: Fib(3) Fib(0)

Page 30: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (i<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

n=0, oppure n=1: restituisce 1

Fib(1) n=2: Fib(2) Fib(0)

Fib(1) Fib(2)

n=3: Fib(3) Fib(0) Fib(1)

Page 31: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (i<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

Fib(1) Fib(2)

n=3: Fib(3) Fib(0) Fib(1)

Fib(1) Fib(2)

Fib(3) Fib(0) n=4: Fib(4) Fib(1)

Page 32: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (i<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

Fib(1) Fib(2)

n=3: Fib(3) Fib(0) Fib(1)

Fib(1) Fib(2)

Fib(3) Fib(0) n=4: Fib(4) Fib(1)

Fib(1) Fib(2)

Fib(0)

Page 33: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

INDUZIONE COMPLETAINDUZIONE COMPLETA

Vogliamo dimostrare che S(n) vale per ogni intero n>a.

Dimostrazione per induzione completa:

1. BASE INDUTTIVA. Si dimostra che l’affermazione è vera per il primo valore, cioè S(a) è vera.

2. PASSO INDUTTIVO. Assumiamo che S(a), S(a+1),…, S(n-1) sono tutte vere e dimostriamo che anche S(n) è

vera.

Page 34: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

VALIDITA’ delle dim. per INDUZIONE Completa VALIDITA’ delle dim. per INDUZIONE Completa

Dim. per induzione S(n) vera, ogni n>a

Base: S(a) vera

Passo induttivo

Minimo controesempio. Supponiamo S(n) falsa per qualche n.Sia b il più piccolo intero tale che S(b) falsa.DEDUCIAMO: Se b=a contraddiciamo la base. Quindi b>a. Essendo b-1>a e b = minimo intero per cui l’affermazione è falsa, si ha S(a),…, S(b-1) vere Per il Passo Induttivo, se S(a),…,S(b-1) sono vere allora anche S(b) è vera.

Abbiamo una contraddizione con l’assunzione che S(b) falsa. Quindi ipotesi è sbagliata enon esiste intero per cui l’affermazione è falsa.

Page 35: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (n<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

Mostriamo per induzione completa l’affermazione S(n): il numero di chiamate fatte per calcolare Fib(n)

è maggiore di fib(n).Per ogni n > 2

Page 36: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (n<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

Mostriamo per induzione completa l’affermazione S(n): il numero di chiamate fatte per calcolare Fib(n) è maggiore di fib(n).Per ogni n > 2

1. BASE INDUTTIVA. S(2) è vera.2. PASSO Ind. S(2), …, S(n-1) implicano S(n)

vera.

Page 37: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (n<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

Mostriamo per induzione completa l’affermazione S(n): il numero di chiamate fatte per

calcolare Fib(n) è maggiore di fib(n).Per ogni n>1.

BASE. Se n=2 abbiamo 3 chiamate, fib(2)=2. S(2) è vera.

Page 38: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

int Fib (int n){ if (n<=1) return 1 /* Base*/ else return Fib(n-1)+Fib(n-2); /* Passo*/ }

Mostriamo per induzione completa l’affermazione S(n): il numero di chiamate (ricorsive) fatte per

calcolare Fib(n) è maggiore di fib(n).Per ogni n>1.

BASE. Se n=2 abbiamo 3 chiamate, fib(2)=2. S(2) vera.

PASSO. Assumiamo S(2), …, S(n-1) vere. Il numero di chiamate fatte per calcolare

Fib(n) è 1+(numero chiamate per Fib(n-1)) +(numero chiamate per Fib(n-2))> (per

i.i.) 1+fib(n-1)+fib(n-2)=1+fib(n)>fib(n)Quindi S(n) vera.

Page 39: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

Esercizio.Mostrare per induzione completa l’affermazione

S(n):

Per ogni n>5.

n

nfib

2

3)(

BASE. fib(0)=fib(1)=1;PASSO. fib(n)=fib(n-1)+fib(n-2)

Page 40: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Numeri di FIBONACCINumeri di FIBONACCI

Esercizio.

Scrivere un programma iterativo per il calcolo di fib(n).

Nota: è sufficiente un ciclo iterativo (con n iterazioni)

BASE. fib(0)=fib(1)=1;PASSO. fib(n)=fib(n-1)+fib(n-2)

Page 41: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Sorting: MERGESORTSorting: MERGESORT

Vogliamo ordinare lista (a1,…,an).

1. Dividi lista in 2 sottoliste aventi (quasi) la stessa

dimensione: (a1,a3,a5,…) e (a2,a4,…)2. Ordina le due liste separatamente3. Fai “merge” delle due lista ottenute (ordinate)

in una unica lista ordinata

Page 42: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Sorting: MERGESORTSorting: MERGESORT

Esempio di una tecnica generale: “Divide and Conquer”

Sottoproblema 1 (simile, più semplice)

Sottoproblema 2

Problema ……

Sottoproblema n Ogni sottoproblema risolto con la stessa tecnica. Finchè non si raggiunge un sottopr. risolvibile direttamente.

Page 43: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Sorting: MERGESORTSorting: MERGESORT

Esempio di una tecnica generale: “Divide and Conquer”

Sottoproblema 1 (simile, più semplice)

Sottoproblema 2

Problema ……

Sottoproblema n Ogni sottoproblema risolto con la stessa tecnica. Finchè non si raggiunge un sottopr. risolvibile direttamente.

soluzione Sottoproblema 1 soluzione Sottoproblema 2

soluzione Problema

… … soluzione Sottoproblema n

Page 44: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

Sorting: MERGESORTSorting: MERGESORT

Vogliamo ordinare lista (a1,…,an).

1. Dividi lista in 2 sottoliste aventi (quasi) la stessa

dimensione: (a1,a3,a5,…) e (a2,a4,…)2. Ordina le due liste separatamente3. Fai “merge” delle due lista ottenute (ordinate)

in una unica lista ordinata

Page 45: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGE (di due liste ordinate LMERGE (di due liste ordinate L11,L,L22 M) M)

Es. L1=(1,2,7,7,9), L2=(2,4,7,8)

M=(1,2,2,4,7,7,7,8,9)

- Trova il minimo tra il primo elemento di L1 e di L2

Rimuovilo dalla lista di appartenenza ed aggiungilo ad M.

- Ripeti

Es.

L1=(1,2,7,7,9), L2=(2,4,7,8), M=(), minimo=1 in L1

Page 46: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGE (di due liste ordinate LMERGE (di due liste ordinate L11,L,L22 M) M)

Es. L1=(1,2,7,7,9), L2=(2,4,7,8)

M=(1,2,2,4,7,7,7,8,9)

- Trova il minimo tra il primo elemento di L1 e di L2

Rimuovilo dalla lista di appartenenza ed aggiungilo ad M.

- Ripeti

Es.

L1=(1,2,7,7,9), L2=(2,4,7,8), M=(), minimo=1 in L1

L1=(2,7,7,9), L2=(2,4,7,8), M=(1), minimo=2

in L1

Page 47: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGE (di due liste ordinate LMERGE (di due liste ordinate L11,L,L22 M) M)

Es. L1=(1,2,7,7,9), L2=(2,4,7,8)

M=(1,2,2,4,7,7,7,8,9)

- Trova il minimo tra il primo elemento di L1 e di L2

Rimuovilo dalla lista di appartenenza ed aggiungilo ad M.

- Ripeti

Es.

L1=(1,2,7,7,9), L2=(2,4,7,8), M=(), minimo=1 in L1

L1=(2,7,7,9), L2=(2,4,7,8), M=(1), minimo=2

in L1

L1=(7,7,9), L2=(2,4,7,8), M=(1,2), minimo=2 in L2

Page 48: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGE (di due liste ordinate LMERGE (di due liste ordinate L11,L,L22 M) M)

L1=(1,2,7,7,9), L2=(2,4,7,8), M=(), minimo=1 in L1

L1=(2,7,7,9), L2=(2,4,7,8), M=(1), minimo=2

in L1

L1=(7,7,9), L2=(2,4,7,8), M=(1,2), minimo=2 in L2

L1=(7,7,9), L2=(4,7,8), M=(1,2,2), minimo=4 in L2

L1=(7,7,9), L2=(7,8), M=(1,2,2,4), minimo=7 in L1

L1=(7,9), L2=(7,8), M=(1,2,2,4,7), minimo=7 in L1

L1=(9), L2=(7,8), M=(1,2,2,4,7,7), minimo=7 in L2

L1=(9), L2=(8), M=(1,2,2,4,7,7,7), minimo=8 in L1

L1=(9), L2=(), M=(1,2,2,4,7,7,7,8), L2 vuota

Aggiungi L2 ad M.M= =(1,2,2,4,7,7,7,8,9).

Page 49: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT

BASE: Se la lista contiene 0 o 1 elemento, stop Ind.: Split di (a1,a2,…) in (a1,a3,…) e (a2,a4,…) Mergesort delle due liste separatamente Merge delle 2 liste ordinate

Page 50: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

Page 51: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

Page 52: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7

Page 53: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7

7-1 9

Page 54: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7

7-1 9

7 1

Page 55: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7

7-1

7 1

7 1

1-7

9

Page 56: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7

7-1 9

7 1

7 1

1-7 9

1-7-9

Page 57: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7

7-1 9 2 7

7 1

7 1

1-7 9 2 7

1-7-9 2-7

1-2-7-7-9

Page 58: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7 8-24-7

7-1 9 2 7

7 1

7 1

1-7 9 2 7

1-7-9 2-7

1-2-7-7-9

Page 59: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7 8-24-7

7-1 9 2 7 4 7

7 1

7 1

1-7 9 2 7 4 7

1-7-9 2-7 4-7

1-2-7-7-9

Page 60: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7 8-24-7

7-1 9 2 7 4 7 8 2

7 1

7 1

1-7 9 2 7 4 7 8 2

1-7-9 2-7 2-84-7

1-2-7-7-9 2-4-8-7

Page 61: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.

MERGESORTMERGESORT7-4-2-8-9-7-7-2-1

7-2-9-7-1 4-8-7-2

7-9-1 2-7 8-24-7

7-1 9 2 7 4 7 8 2

7 1

7 1

1-7 9 2 7 4 7 8 2

1-7-9 2-7 2-84-7

1-2-7-7-9 2-4-7-8

1-2-2-4-7-7-7-8-9

Page 62: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.
Page 63: RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli.