La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli."— Transcript della presentazione:

1 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) X n, 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,…

2 Definizione ricorsiva di n fattoriale, f(n): BASE. f(1)=1 PASSO. f(n)=f(n-1) X n 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.

3 Definizione ricorsiva di n fattoriale, f(n): BASE. f(1)=1 PASSO. f(n)=f(n-1) X n 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

4 Definizione ricorsiva di n fattoriale, f(n): BASE. f(1)=1 PASSO. f(n)=f(n-1) X n 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.

5 Definizione ricorsiva di n fattoriale, f(n): BASE. f(1)=1 PASSO. f(n)=f(n-1) X n 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.) =(1 x … x n) x (n+1)=1 x … x (n+1)= (n+1)! Quindi S(n+1) è vera.

6 Definizione ricorsiva dellordine lessicografico Definiamo in modo ricorsivo coppie di stringhe W ed X tali che W { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.it/193686/1/slides/slide_5.jpg", "name": "Definizione ricorsiva dellordine lessicografico Definiamo in modo ricorsivo coppie di stringhe W ed X tali che W

7 Definizione ricorsiva dellordine lessicografico BASE. 1. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.it/193686/1/slides/slide_6.jpg", "name": "Definizione ricorsiva dellordine lessicografico BASE.", "description": "1.

8 Definizione ricorsiva dellordine lessicografico BASE. 1. 0.

9 Definizione ricorsiva di espressioni aritmetiche BASE. Singole variabili, interi e reali sono espressioni aritmetiche PASSO. Se E 1 ed E 2 sono espressioni aritmetiche allora (E 1 +E 2 ), (E 1 - E 2 ), ( E 1 *E 2 ), (E1/E2), (-E 1 ) sono espressioni aritmetiche.

10 Definizione ricorsiva di espressioni aritmetiche BASE. Singole variabili, interi e reali sono espressioni aritmetiche PASSO. Se E 1 ed E 2 sono espressioni aritmetiche allora (E 1 +E 2 ), (E 1 - E 2 ), ( E 1 *E 2 ), (E1/E2), (-E 1 ) sono espressioni aritmetiche. Es. (y * (-(x+9)) è una espressione aritmetica.

11 Definizione ricorsiva di espressioni aritmetiche BASE. Singole variabili, interi e reali sono espressioni aritmetiche PASSO. Se E 1 ed E 2 sono espressioni aritmetiche allora (E 1 +E 2 ), (E 1 - E 2 ), ( E 1 *E 2 ), (E1/E2), (-E 1 ) sono espressioni aritmetiche. Es. (y * (-(x+9)) è una espressione arirmetica. Verifica: Usando la BASE: x,y e 9 sono espressioni aritmetiche

12 Definizione ricorsiva di espressioni aritmetiche BASE. Singole variabili, interi e reali sono espressioni aritmetiche PASSO. Se E 1 ed E 2 sono espressioni aritmetiche allora (E 1 +E 2 ), (E 1 - E 2 ), ( E 1 *E 2 ), (E1/E2), (-E 1 ) 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.

13 Definizione ricorsiva di espressioni aritmetiche BASE. Singole variabili, interi e reali sono espressioni aritmetiche PASSO. Se E 1 ed E 2 sono espressioni aritmetiche allora (E 1 +E 2 ), (E 1 - E 2 ), ( E 1 *E 2 ), (E1/E2), (-E 1 ) 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.

14 Definizione ricorsiva di espressioni aritmetiche BASE. Singole variabili, interi e reali sono espressioni aritmetiche PASSO. Se E 1 ed E 2 sono espressioni aritmetiche allora (E 1 +E 2 ), (E 1 - E 2 ), ( E 1 *E 2 ), (E1/E2), (-E 1 ) 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.

15 FUNZIONI RICORSIVE Allinterno della funzione P cè una chiamata a P (su input diverso).

16 FUNZIONI RICORSIVE Allinterno 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

17 FUNZIONI RICORSIVE Allinterno 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*/ }

18 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

19 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 chiama n=2: fact(2) fact(1) 1

20 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 chiama n=2: fact(2) fact(1) 1 chiama chiama n=3: fact(3) fact(2) fact(1) 2 1

21 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 chiama n=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

22 SelectionSort 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]

23 SelectionSort 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 { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.it/193686/1/slides/slide_22.jpg", "name": "SelectionSort 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.", "description": "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

24 SelectionSort RICORSIVO void Rec- SelectionSort(int A[], int i, int n) int j,small,temp; { if (i { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.it/193686/1/slides/slide_23.jpg", "name": "SelectionSort RICORSIVO void Rec- SelectionSort(int A[], int i, int n) int j,small,temp; { if (i

25 Numeri di FIBONACCI BASE. fib(0)=fib(1)=1; PASSO. fib(n)=fib(n-1)+fib(n-2)

26 Numeri 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*/ }

27 Numeri 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)

28 Numeri 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)

29 Numeri 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)

30 Numeri 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)

31 Numeri 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(2) Fib(3) Fib(0) n=4: Fib(4) Fib(1)

32 Numeri 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(2) Fib(3) Fib(0) n=4: Fib(4) Fib(1) Fib(1) Fib(2) Fib(0)

33 INDUZIONE COMPLETA Vogliamo dimostrare che S(n) vale per ogni intero n>a. Dimostrazione per induzione completa: 1.BASE INDUTTIVA. Si dimostra che laffermazione è 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.

34 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 laffermazione è 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 lassunzione che S(b) falsa. Quindi ipotesi è sbagliata e non esiste intero per cui laffermazione è falsa.

35 Numeri 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 laffermazione S(n): il numero di chiamate fatte per calcolare Fib(n) è maggiore di fib(n). Per ogni n > 2

36 Numeri 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 laffermazione 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.

37 Numeri 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 laffermazione 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.

38 Numeri 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 laffermazione 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.

39 Numeri di FIBONACCI Esercizio. Mostrare per induzione completa laffermazione S(n): Per ogni n>5. BASE. fib(0)=fib(1)=1; PASSO. fib(n)=fib(n-1)+fib(n-2)

40 Numeri 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)

41 Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…) 2. Ordina le due liste separatamente 3. Fai merge delle due lista ottenute (ordinate) in una unica lista ordinata

42 Sorting: 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.

43 Sorting: 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

44 Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…) 2. Ordina le due liste separatamente 3. Fai merge delle due lista ottenute (ordinate) in una unica lista ordinata

45 MERGE (di due liste ordinate L 1,L 2 M) Es. L 1 =(1,2,7,7,9), L 2 =(2,4,7,8) M=(1,2,2,4,7,7,7,8,9) - Trova il minimo tra il primo elemento di L 1 e di L 2 Rimuovilo dalla lista di appartenenza ed aggiungilo ad M. - Ripeti Es. L 1 =(1,2,7,7,9), L 2 =(2,4,7,8), M=(), minimo=1 in L 1

46 MERGE (di due liste ordinate L 1,L 2 M) Es. L 1 =(1,2,7,7,9), L 2 =(2,4,7,8) M=(1,2,2,4,7,7,7,8,9) - Trova il minimo tra il primo elemento di L 1 e di L 2 Rimuovilo dalla lista di appartenenza ed aggiungilo ad M. - Ripeti Es. L 1 =(1,2,7,7,9), L 2 =(2,4,7,8), M=(), minimo=1 in L 1 L 1 =(2,7,7,9), L 2 =(2,4,7,8), M=(1), minimo=2 in L 1

47 MERGE (di due liste ordinate L 1,L 2 M) Es. L 1 =(1,2,7,7,9), L 2 =(2,4,7,8) M=(1,2,2,4,7,7,7,8,9) - Trova il minimo tra il primo elemento di L 1 e di L 2 Rimuovilo dalla lista di appartenenza ed aggiungilo ad M. - Ripeti Es. L 1 =(1,2,7,7,9), L 2 =(2,4,7,8), M=(), minimo=1 in L 1 L 1 =(2,7,7,9), L 2 =(2,4,7,8), M=(1), minimo=2 in L 1 L 1 =(7,7,9), L 2 =(2,4,7,8), M=(1,2), minimo=2 in L 2

48 MERGE (di due liste ordinate L 1,L 2 M) L 1 =(1,2,7,7,9), L 2 =(2,4,7,8), M=(), minimo=1 in L 1 L 1 =(2,7,7,9), L 2 =(2,4,7,8), M=(1), minimo=2 in L 1 L 1 =(7,7,9), L 2 =(2,4,7,8), M=(1,2), minimo=2 in L 2 L 1 =(7,7,9), L 2 =(4,7,8), M=(1,2,2), minimo=4 in L 2 L 1 =(7,7,9), L 2 =(7,8), M=(1,2,2,4), minimo=7 in L 1 L 1 =(7,9), L 2 =(7,8), M=(1,2,2,4,7), minimo=7 in L 1 L 1 =(9), L2=(7,8), M=(1,2,2,4,7,7), minimo=7 in L 2 L 1 =(9), L2=(8), M=(1,2,2,4,7,7,7), minimo=8 in L 1 L1=(9), L2=(), M=(1,2,2,4,7,7,7,8), L2 vuota Aggiungi L 2 ad M. M= =(1,2,2,4,7,7,7,8,9).

49 MERGESORT BASE: Se la lista contiene 0 o 1 elemento, stop Ind.: Split di (a 1,a 2, …) in (a 1,a 3,…) e (a 2,a 4,…) Mergesort delle due liste separatamente Merge delle 2 liste ordinate

50 MERGESORT 7-4-2-8-9-7-7-2-1

51 MERGESORT 7-2-9-7-1 4-8-7-2

52 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-7

53 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-7 7-19

54 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-7 7-19 7 1

55 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-7 7-1 7 1 71 1-7 9

56 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-7 7-19 7 1 71 1-7 9 1-7-9

57 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-7 7-1927 7 1 71 1-7 9 2 7 1-7-92-7 1-2-7-7-9

58 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-78-24-7 7-1927 7 1 71 1-7 9 2 7 1-7-92-7 1-2-7-7-9

59 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-78-24-7 7-19274 7 7 1 71 1-7 9 2 7 47 1-7-92-74-7 1-2-7-7-9

60 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-78-24-7 7-19274 782 7 1 71 1-7 9 2 7 47 82 1-7-92-7 2-8 4-7 1-2-7-7-9 2-4-8-7

61 MERGESORT 7-4-2-8-9-7-7-2-1 7-2-9-7-1 4-8-7-2 7-9-12-78-24-7 7-19274 782 7 1 71 1-7 9 2 7 47 82 1-7-92-7 2-8 4-7 1-2-7-7-9 2-4-7-8 1-2-2-4-7-7-7-8-9

62

63


Scaricare ppt "RICORSIONE: DEFINIZIONI RICORSIVE Definizione ricorsiva: Definizione ricorsiva: definizione di una classe di oggetti in termini di una sottoclasse degli."

Presentazioni simili


Annunci Google