La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XXVII La ricorsione Programmazione di Calcolatori: la ricorsione 1.

Presentazioni simili


Presentazione sul tema: "G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XXVII La ricorsione Programmazione di Calcolatori: la ricorsione 1."— Transcript della presentazione:

1

2 G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XXVII La ricorsione Programmazione di Calcolatori: la ricorsione 1

3 G. Amodeo, C. Gaibisso La ricorsione Programmazione di Calcolatori: la ricorsione2 Definizione ricorsiva: definizione di un oggetto (un insieme, una struttura, una funzione, …) in termini della definizione delloggetto stesso Comportamento ricorsivo quello esibito da una classe di oggetti definibili tramite due proprietà: un insieme di casi base un insieme di regole che riducono qualsiasi caso a uno dei casi base

4 G. Amodeo, C. Gaibisso Le funzioni ricorsive Programmazione di Calcolatori: la ricorsione3 Il fattoriale: I numeri di Fibonacci:

5 G. Amodeo, C. Gaibisso Le funzioni ricorsive Programmazione di Calcolatori: la ricorsione4 Il calcolo: fatt(5) =5 * fatt(4) = =5 * 4 * fatt(3) = = 5 * 4 * 3 * fatt(2) = = 5 * 4 * 3 * 2 * fatt(1) = = 5 * 4 * 3 * 2 * 1 * fatt(0)= = 5 * 4 * 3 * 2 * 1 * 1=

6 G. Amodeo, C. Gaibisso Le funzioni ricorsive Programmazione di Calcolatori: la ricorsione5 //Nome e posizione del file: //Lezione_XXVII/fatt.c //Descrizione del contenuto del file: //funzioni per il calcolo ricorsivo del fattoriale //Descrizione della funzionalita' implementata: //calcola ricorsivamente il fattoriale di un intero positivo // Tipo, nome e significato dei parametri della funzione: //int n:valore dell'argomento del fattoriale // Tipo e significato del valore restituito: //int: fattoriale del valore fornito in ingresso int fatt(int n) { // il fattoriale di 0 e' 1 if (n == 0) return(1); // il fattoriale di n, con n diverso da, e' n per il fattoriale di n-1 return(n*fatt(n-1)); };

7 G. Amodeo, C. Gaibisso Le funzioni ricorsive Programmazione di Calcolatori: la ricorsione6 Esecuzione:

8 G. Amodeo, C. Gaibisso Le funzioni ricorsive Programmazione di Calcolatori: la ricorsione7 //Nome e posizione del file: //Lezione_XXVII/fibonacci.c //Descrizione del contenuto del file: //funzioni per il calcolo ricorsivo //della sequenza di fibonacci //Descrizione della funzionalita' implementata: //calcola ln-esimo numero della sequenza di fibonacci //Tipo, nome e significato dei parametri della funzione: //int n: posizione del numero all'interno della sequenza di fibonacci //Tipo e significato del valore restituito: //int:l'n-esimo valore della sequenza di fibonacci int fib(int n) { // il primo numero nella sequenza di fibonacci e' 0 if (n == 0) return(0); // il secondo numero nella sequenza di fibonacci e' 1 if (n == 1) return(1); // l'n-esimo numero nella sequenza di fibonacci, con n > 1, e' la somma // dell'(n-1)-esimo e dell'(n-2)-esimo numero della stessa sequenza return(fib(n-1)+fib(n-2)); };

9 G. Amodeo, C. Gaibisso Le funzioni ricorsive Programmazione di Calcolatori: la ricorsione8 Esecuzione:

10 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione9 Lista di valori di tipo T (L T ): Le liste: t n.t n-1. …. t 2. t 1. empty

11 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione10 L L N ?: L = empty L N ? 8 N e empty L N ? 4 N e empty L N ? 5 N e 28. empty L N ? 28 N e empty L N ? 100 N e empty L N ? SI

12 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione11 L L N ?: L = 100.8, empty L N ? 8,5 N e empty L N ? 100 N e 8, empty L N ? SI NO

13 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione12 Qual è la somma degli elementi di L L N (liste di naturali)?

14 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione13 //Nome e posizione del file: //Lezione_XXVII/somma.c // Descrizione del contenuto del file: //funzioni per il calcolo ricorsivo della somma degli elementi di //un vettore di naturali (codificata con un vettore di interi) //Descrizione della funzionalita' implementata: //calcola ricorsivamente la somma degli elementi del vettore // Tipo, nome e significato dei parametri della funzione: // int vett: riferimento ad un vettore di interi // int dim: dimensione del vettore // Tipo e significato del valore restituito: //int: somma degli elementi del vettore int somma(int *vett, int dim) { // se il vettore e' vuoto la somma vale 0 if (dim == 0) return(0); // la somma degli elementi di un vettore di dimensione non nulla // e' pari al primo elemento del vettore + la somma degli // elementi nella parte rimanente del vettore return(vett[0] + somma(vett+1, dim-1); };

15 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione14 Esecuzione:

16 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione15 Ricerca ricorsiva di un elemento in L L T :

17 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione16 //Nome e posizione del file: //Lezione_XXVII/cerca.c //Descrizione del contenuto del file: //funzioni per la ricerca ricorsiva di un valore all'interno di una lista di //naturali (codificata con un vettore di interi) //Descrizione della funzionalita' implementata: //ricerca ricorsivamente un valore all'interno di un vettore // Tipo, nome e significato dei parametri della funzione: //int vett: riferimento ad un vettore di interi //int dim: dimensione del vettore //int val: valore cercato // Tipo e significato del valore restituito: //int: 1 se l'elemento è presente; 0 altrimenti int cerca(int *vett, int dim, int val) { // se il vettore e' vuoto restituisce false if (dim == 0) return(0); // se il primo elemento del vettore coincide con il valore cercato restituisce 1 if (vett[0] == val) return(1); // altrimenti cerca lo stesso valore all'interno del vettore privato del // primo elemento return(cerca(vett+1, dim-1, val, nro_call, lev_of_nest+1)); };

18 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione17 Esecuzione:

19 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione18 L L T è ordinata in modo strettamente crescente?

20 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione19 //Nome e posizione del file: //Lezione_XXVII/ordinata.c //Descrizione del contenuto del file: //funzioni che verificano se una // lista di interi e' ordinata //Descrizione della funzionalita' implementata: //verifica ricorsivamente se la lista e' ordinata // Tipo, nome e significato dei parametri della funzione: //int vett: riferimento ad un vettore di interi //int dim: dimensione del vettore //Tipo e significato del valore restituito: //int: 1 se la lista e' ordinata; 0 altrimenti int ordinata (int *vett, int dim) { // se il vettore e' vuoto restituisce 1 if (dim == 0) return(1); // se la lista contiene un solo elemento restituisce 1 if (dim == 1) return(1); // se il primo elemento della lista e' superiore al secondo restituisce 0 if (vett[0] > vett[1]) return(0); // altrimenti verifica il vettore privato del primo elemento return(ordinata(vett+1, dim-1)); };

21 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione20 Esecuzione:

22 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione21 Esecuzione:

23 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione22 Qual è il massimo di L L N ?

24 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione23 //Nome e posizione del file: //Lezione_XXVII/max_1.c //Descrizione del contenuto del file: //funzioni per il calcolo ricorsivo //del massimo di una lista di //naturali //Descrizione della funzionalita' implementata: //calcola ricorsivamente il massimo degli elementi del vettore //Tipo, nome e significato dei parametri della funzione: //int vett: riferimento ad un vettore di interi //int dim: dimensione del vettore // Tipo e significato del valore restituito: //int: massimo degli elementi del vettore int max(int *vett, int dim) { // se il vettore e' vuoto il massimo è 0 if (dim == 0) return(0); // se il vettore contiene un solo elemento il massimo e' l'elemento stesso if (dim == 1) return(vett[0]); // se il primo elemento e' maggiore del massimo della parte rimanente // del vettore il massimo e' il primo elemento if (vett[0] >= max(vett+1, dim-1)) return(vett[0]); else // altrimenti il massimo e' quello della parte rimanente del vettore return(max(vett+1, dim-1)) };

25 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione24 Esecuzione:

26 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione25 Esecuzione:

27 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione26 //Nome e posizione del file: //Lezione_XXVII/max_1_o.c //Descrizione del contenuto del file: //funzioni per il calcolo ricorsivo //del massimo di una lista di //naturali limitando il numero //delle chiamate ricorsive //Descrizione della funzionalita' implementata: //calcola ricorsivamente il massimo degli elementi del vettore // Tipo, nome e significato dei parametri della funzione: //int vett: riferimento ad un vettore di interi //int dim: dimensione del vettore //Tipo e significato del valore restituito: //int: massimo degli elementi del vettore int max(int *vett, int dim) { // definisce una variabile di appoggio per il massimo int aux; // se il vettore e' vuoto il massimo e' 0 if (dim == 0) return(0); // se il vettore contiene un solo elemento il massimo e' l'elemento stesso if (dim == 1) return(vett[0]);

28 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione27 // se il primo elemento e' maggiore del massimo della parte rimanente // del vettore il massimo e' il primo elemento if (vett[0] >= (aux=max(vett+1, dim-1))) return(vett[0]); else // altrimenti il massimo e' quello della parte rimanente del vettore return(max(vett+1, dim-1)); };

29 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione28 Esecuzione:

30 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione29 Esecuzione:

31 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione30 Qual è il massimo di L L N ?

32 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione31 //Nome e posizione del file: //Lezione_XXVII/max_2.c //Descrizione del contenuto del file: //funzioni per il calcolo ricorsivo //del massimo degli elementi di // una lista di naturali // Tipo, nome e significato dei parametri della funzione: //int vett: riferimento ad un vettore di interi //int dim: dimensione del vettore //Descrizione della funzionalita' implementata: //calcola ricorsivamente il massimo degli elementi del vettore // Tipo e significato del valore restituito: //int: massimo degli elementi del vettore int max(int *vett, int dim) { // se il vettore e' vuoto il massimo è 0 if (dim == 0) return(0); // se il vettore contiene un solo elemento il massimo e' // l'elemento stesso if (dim == 1) return(vett[0]);

33 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione32 // se il primo elemento e' maggiore del secondo, il massimo e' il massimo // tra il primo elemento e gli elementi del vettore a partire dal terzo if (vett[0] >= vett[1]) { //scambia il primo elemento con il secondo scambia(vett, vett+1); return(max(vett+1, dim-1)); } else // altrimenti il massimo e' il massimo tra il II elemento e gli elementi // del vettore a partire dal terzo return(max(vett+1, dim-1)); };

34 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione33 Esecuzione:

35 G. Amodeo, C. Gaibisso Le strutture ricorsive Programmazione di Calcolatori: la ricorsione34 Esecuzione:


Scaricare ppt "G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XXVII La ricorsione Programmazione di Calcolatori: la ricorsione 1."

Presentazioni simili


Annunci Google