Introduzione alla Ricorsione

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Il problema della ricerca Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Procedure e funzioni ricorsive
Iterazione Capitolo 17 febbraio 2004 Iterazione.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 1 Unintroduzione informale agli algoritmi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Iterazione enumerativa (for)
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Interrogazioni.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Il problema della ricerca Algoritmi e Strutture Dati.
Il problema della ricerca Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Boruvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Diremo che f(n) =
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Strutture di controllo in C -- Flow Chart --
La Programmazione Ricorsiva
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Introduzione agli algoritmi e strutture dati 2/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2005 – The McGraw-Hill Companies srl.
La ricorsione.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Il problema della ricerca Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Il problema della ricerca Algoritmi e Strutture Dati.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione.
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
10. Programmazione Ricorsiva Ing. Simona Colucci
Transcript della presentazione:

Introduzione alla Ricorsione Corso di Informatica A Vito Perrone

Informatica A – V. Perrone Indice La formulazione in termini ricorsivi di problemi e algoritmi La ricorsione come strumento di programmazione L’esecuzione dei sottoprogrammi ricorsivi Ulteriori esempi Ricorsione Informatica A – V. Perrone

La formulazione in termini ricorsivi di problemi e algoritmi La ricorsione: che cos’è? Un sottoprogramma P chiama -durante la sua esecuzione- un altro sottoprogramma Q Q a sua volta chiama un terzo R, … R chiama nuovamente P: (ricorsione indiretta) Oppure P chiama se stesso durante la propria esecuzione (ricorsione diretta) Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Un esempio classico Individuare, in un gruppo di palline l’unica pallina di peso maggiore delle altre facendo uso di una bilancia “a basculla” (Per semplicità: il numero di palline sia una potenza di 3) Algoritmo Pesate: Se il gruppo di palline consiste in una sola pallina, allora essa è banalmente la pallina cercata, altrimenti procedi come segue. Dividi il gruppo di palline in tre e confronta due dei tre sottogruppi. Se i due gruppi risultano di peso uguale scarta entrambi, altrimenti scarta il gruppo non pesato e quello risultato di peso minore. Applica l’algoritmo Pesate al gruppo rimanente. Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Esempi matematici (1) x + 0 = x; x + y = x + Successore(y–1) = Successore (x + (y–1)) : 1+3 = Successore (1+2) = Successore(Successore(1+1)) = Successore(Successore(Successore(1+0))) = Successore(Successore(Successore(1))) = Successore(Successore(2)) = Successore(3) = 4 Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Esempi matematici (2) I numeri di Fibonacci, F = {f0, ..., fn}: f0 = 0 f1 = 1 Per n > 1, fn = f n–1 + fn–2 Esempio: f2 = f1 + f0 = 1 + 0 = 1 f3 = f2 + f1 = 1 + 1 = 2 f4 = f3 + f2 = 2 + 1 = 3 Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Esempi matematici (3) La sommatoria di una sequenza di numeri Es. {2,5,7,9} n=4 Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Esempi matematici (4) La lista inversa L–1 di una lista di elementi L = {a1, ..., an}: se n = 1, L–1 = L; altrimenti, L–1 = {an, (Ln–1)–1} Dove Ln–1 indica la lista ottenuta da L cancellando l’ultimo elemento an. Esempio: 2,7,5,4–1 = 4, 2,7,5–1 = 4,5, 2,7–1 = 4,5,7, 2–1 = 4,5,7,2 Ricorsione Informatica A – V. Perrone

La ricorsione come strumento di programmazione Programma Fibonacci: int fibonacci (int n) { int ris; if (n == 0) ris = 0; else if (n == 1) ris = 1; else ris = fibonacci(n–1) + fibonacci(n–2); return ris; } Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Esempio Fattoriale 5! = 5*4*3*2*1 n! = n*(n-1)! 0! = 0 <- convenzione Ricorsione Informatica A – V. Perrone

L’esecuzione di sottoprogrammi ricorsivi (1) Calcolo del fattoriale di 3 (secondo lo schema conosciuto): Il valore del parametro attuale, 3, viene copiato nel parametro formale, n Ha inizio l’esecuzione di FattRic. Essa giunge a n*FattRic(2), il cui risultato dovrebbe essere assegnato alla cella FattRic per poi essere passato al chiamante. A questo punto avviene la nuova chiamata di FattRic. Il nuovo valore del parametro attuale, 2, viene copiato nella cella n, cancellando il precedente valore 3 Ricorsione Informatica A – V. Perrone

L’esecuzione di sottoprogrammi ricorsivi (2) record di attivazione Prima attivazione n FattRic 3 3*2 = 6 Seconda attivazione 2 2*1 = 2 Terza attivazione 1 1*1 = 1 Quarta attivazione 1 Ricorsione Informatica A – V. Perrone

L’esecuzione di sottoprogrammi ricorsivi (3) Passaggio parametri -anche- per indirizzo: void incrementa(int *n, int m) { if (m != 0) *n = *n + 1; incrementa(n, m–1); } Ricorsione Informatica A – V. Perrone

L’esecuzione di sottoprogrammi ricorsivi (4) y 3 Area dati della funzione chiamante x 2 Quarta attivazione 5 Prima attivazione n m 3 Terza attivazione 1 5 Seconda attivazione 2 4 Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone L’esecuzione di sottoprogrammi ricorsivi (5): la gestione a pila della memoria (a) Variabili globali main record di attivazione del main P2” record di attivazione di P2" P1 record di attivazione di P1 P2’ record di attivazione di P2’ P3 record di attivazione di P3 Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone L’esecuzione di sottoprogrammi ricorsivi (6): la gestione a pila della memoria (b) Variabili globali record di attivazione del main di P1 di P2’ di P3 di P2" P3 P1 P2’ P3 P2” main P2’ Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone L’esecuzione di sottoprogrammi ricorsivi (7): la gestione a pila della memoria (c) Variabili globali record di attivazione del main di P1 di P2’ P3 P2’ main P1 P2” P4 record di attivazione di P4 P2’ P1 main Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Ulteriori esempi (1) /* Programma RicPalindr*/ #include <stdio.h> #include <string.h>   typedef enum {false, true} boolean; void main () { #define LunghMaxStringa 100 char Stringa1[LunghMaxStringa]; boolean OK; unsigned LunghStringa; boolean Palindrome (char *PC, char *UC); /* L’istruzione seguente assume che i caratteri componenti la stringa non siano spazi */ scanf ("%s", Stringa1); LunghStringa = strlung (Stringa1); if (LunghStringa == 0) printf ("La stringa è palindroma"); else … Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Ulteriori esempi (2) /* Programma RicPalindr*/ … else { /* Viene chiamata la funzione Palindrome passando per indirizzo il primo e l'ultimo carattere della stringa da analizzare */ OK = Palindrome (&Stringa1[0], &Stringa1[LunghStringa–1]; if (OK == true) printf ("La stringa è palindroma”); printf ("La stringa non è palindroma"); }   boolean Palindrome (char, *PC, char *UC) Ricorsione Informatica A – V. Perrone

Informatica A – V. Perrone Ulteriori esempi (3) /* Programma RicPalindr*/ …   boolean Palindrome (char, *PC, char *UC) { if (PC >= UC) /* Se la stringa è vuota o è costituita da un solo carattere */ return true; else if (*PC != *UC) /* Se il primo e l'ultimo carattere sono diversi */ return false; else /* Chiama se stessa ricorsivamente escludendo il primo e l'ultimo carattere */ return Palindrome (PC+1, UC–1); } Ricorsione Informatica A – V. Perrone