10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A. 2012-2013.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

LINGUAGGIO DI PROGRAMMAZIONE C
Sottoprogrammi: funzioni e procedure
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
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 A. Ferrari.
Procedure e funzioni ricorsive
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Introduzione al linguaggio C
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
INFORMATICA Strutture iterative
Iterazione enumerativa (for)
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Corso di Informatica (Programmazione)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
LdL - LP1 - ver. 6 - lez aa Linguaggi di programmazione I La ricorsione Prof. Luigi Di Lascio Lezione 10.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
nome: sequenza di caratteri usata per denotare un oggetto
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Introduzione alla Ricorsione
La Programmazione Ricorsiva
Le funzioni.
FUNZIONI: IL MODELLO APPLICATIVO 1) Valutazione, nellenvironment corrente, del simbolo che denota il nome della funzione; 2) Valutazione, nellenvironment.
DEFINIZIONE DI NUOVE FUNZIONI & STRATEGIE DI COMPOSIZIONE La capacità di definire nuove funzioni permette: di definire nuove operazioni di introdurre variabili.
4 Tipi di dati & variabili
Algoritmi e Strutture Dati
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Massimo Comun Divisore
Un esempio: Calcolo della potenza n-esima di un numero reale
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Ricorsione Strumento potente per definizioni matematiche
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Complessità di un algoritmo
Nota (rif. alla lezione precedente): Vector vs ArrayList Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma: I metodi.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
Definizione di un algoritmo
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.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 3 Aprile 2015.
La ricorsione.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Allievi Elettrici - AA Le funzioni ricorsive in C
Sottoprogrammi e funzioni
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
FUNZIONI: IL MODELLO A RUN-TIME 1) creazione di una nuova attivazione (istanza) del servitore 2) allocazione di memoria per i parametri e per le variabili.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
10. Programmazione Ricorsiva Ing. Simona Colucci
Transcript della presentazione:

10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A

Indice La formulazione in termini ricorsivi di problemi e algoritmi La ricorsione come strumento di programmazione L ’ esecuzione dei sottoprogrammi ricorsivi Ulteriori esempi Informatica - CDL in Ingegneria Industriale- A.A

La formulazione in termini ricorsivi di problemi e algoritmi La ricorsione: durante l’esecuzione di un sottoprogramma P avviene una nuova chiamata allo stesso P –ricorsione indiretta : P chiama -durante la sua esecuzione- un altro sottoprogramma Q Q a sua volta chiama un terzo R, … R chiama nuovamente P –ricorsione diretta: P chiama se stesso durante la propria esecuzione Informatica - CDL in Ingegneria Industriale- A.A

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. Informatica - CDL in Ingegneria Industriale- A.A

Un esempio matematico La sommatoria di una sequenza di numeri Informatica - CDL in Ingegneria Industriale- A.A

La ricorsione come strumento di programmazione Calcolo del Fattoriale in modo ricorsivo: intFattRic(int n) { intris; if (n == 0) ris = 1; else ris = n * FattRic(n–1); returnris; } Informatica - CDL in Ingegneria Industriale- A.A

L’esecuzione di sottoprogrammi ricorsivi Calcolo del fattoriale di 3 con l’uso dello schema di chiamata ai sottoprogrammi noto: –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 Necessità di associare un aerea dati per ogni esecuzione del sottoprogramma: attivazione Informatica - CDL in Ingegneria Industriale- A.A

L’esecuzione di sottoprogrammi ricorsivi Informatica - CDL in Ingegneria Industriale- A.A record di attivazione Seconda attivazione 2 Terza attivazione 1 Quarta attivazione 0 1*1 = 1 2*1 = 2 Prima attivazione nFattRic 3 3*2 = 6 1

L’esecuzione di sottoprogrammi ricorsivi Passaggio parametri per indirizzo: voidincrementa(int *n, int m) { if (m != 0) { *n = *n + 1; incrementa(n, m–1); } Informatica - CDL in Ingegneria Industriale- A.A

L’esecuzione di sottoprogrammi ricorsivi Informatica - CDL in Ingegneria Industriale- A.A y 3 Area dati della funzione chiamante x 2 Prima attivazione n m 3 3 Seconda attivazione 2 4 Terza attivazione 1 5 Quarta attivazione 0 5 incrementa(&x, y)

L’esecuzione di sottoprogrammi ricorsivi: la gestione a pila della memoria La memoria per l’esecuzione di un sottoprogramma ricorsivo non può essere allocata staticamente La conseguente perdita di efficienza può essere limitata usando una disciplina LIFO (Last In First Out) per la chiamata dei sottoprogrammi: la prima esecuzione a terminare è sempre quella relativa all’ultima chiamata L’organizzazione di memoria utilizzata è la pila Ogni aerea dati è chiamata record di attivazione Informatica - CDL in Ingegneria Industriale- A.A

L’esecuzione di sottoprogrammi ricorsivi la gestione a pila della memoria (a) Informatica - CDL in Ingegneria Industriale- A.A Variabili globali main record di attivazione del main P1 record di attivazione di P1 P2’ record di attivazione di P2’ P3 record di attivazione di P3 P2” record di attivazione di P2"

L’esecuzione di sottoprogrammi ricorsivi(6) la gestione a pila della memoria (b) Informatica - CDL in Ingegneria Industriale- A.A P1P2’P3P2”main Variabili globali record di attivazione del main record di attivazione di P1 record di attivazione di P2’ record di attivazione di P3 record di attivazione di P2" P3 P2’

L’esecuzione di sottoprogrammi ricorsivi(7) la gestione a pila della memoria (c) Informatica - CDL in Ingegneria Industriale- A.A Variabili globali record di attivazione del main record di attivazione di P1 record di attivazione di P2’ P3P2’ mainP1P2’P3P2” P4 record di attivazione di P4 P2’ P1 main

Ulteriori esempi (1) /* Programma RicPalindr*/ #include typedefenum {false, true} boolean; voidmain () { #defineLunghMaxStringa100 charStringa1[LunghMaxStringa]; booleanOK; unsignedLunghStringa; booleanPalindrome (char *PC, char *UC); /* L’istruzione seguente assume che i caratteri componenti la stringa non siano spazi */ scanf ("%s", Stringa1); LunghStringa = strlen (Stringa1); if (LunghStringa == 0) printf ("La stringa è palindroma"); else … Informatica - CDL in Ingegneria Industriale- A.A

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”); else printf ("La stringa non è palindroma"); } booleanPalindrome (char *PC, char *UC) … Informatica - CDL in Ingegneria Industriale- A.A

Ulteriori esempi (3) /* Programma RicPalindr*/ … booleanPalindrome (char *PC, char *UC) { if(PC >= UC) /* Se la stringa è vuota o è costituita da un solo carattere */ return true; elseif (*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); } Informatica - CDL in Ingegneria Industriale- A.A