Ricorsione Strumento potente per definizioni matematiche

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Funzioni In C++ le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri.
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
IL MODELLO CLIENTE / SERVITORE. Servitore: un qualunque ente computazionale capace di nascondere la propria organizzazione interna presentando ai clienti.
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Analisi della complessità degli algoritmi
Procedure e funzioni A. Ferrari.
Analisi della complessità degli algoritmi
Procedure e funzioni ricorsive
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
MATEMATICA FINANZIARIA
Iterazione enumerativa (for)
Alberi binari Definizione della struttura dati: struct tree { };
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Esercitazione 2 (3 dicembre 2008)
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Eliminare la ricorsione ovvero gestire direttamente la pila.
Progetto di algoritmi: metodologia "Divide et Impera"
Divina proportione … 1:a=a:b 0,618 Prof. Fabrizio Camuso
Selezione (=scelta) con “if-else”
Unità Didattica 1 Algoritmi
Introduzione alla Ricorsione
Le liste dinamiche La ricorsione
La Programmazione Ricorsiva
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.
ESERCIZIO: la Torre di Hanoi
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Algoritmi e Strutture Dati
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Programmazione di Calcolatori
Parte 5 Laboratorio di Informatica Dott.ssa Elisa Tiezzi
Iterazione Vs Ricorsione
1 Parte 5 Fondamenti di Programmazione. 2 Programmazione Concetti base: dati istruzioni Dati: variabili tipi Istruzioni: istruzioni base strutture di.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Alberi binari Definizione della struttura dati: struct tree { };
Complessità di un algoritmo
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Ricorsione CORDA – Informatica A. Ferrari Testi da Alessandro Bugatti
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
La ricorsione.
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
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
4/25/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
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.
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Iterazione Vs Ricorsione Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Suggerimenti [1d5] SE la prima lettera della matrice (in alto a sinistra, matrice[0,0]) è diversa dalla prima lettera della parola (parola[0]) ALLORA siamo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Iterazione Vs Ricorsione Marco D. Santambrogio – Ver. aggiornata al 8 Gennaio 2016.
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 18 Maggio 2016.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

Ricorsione Strumento potente per definizioni matematiche Possibilità di definire insieme infinito di oggetti con regola finita possibilità di descrivere un insieme infinito di computazioni con un programma finito

Ricorsione in matematica Le formule matematiche sono spesso espresse in termini ricorsivi Esempio: definizione di fattoriale 1!=1 N!=N * (N-1)!

Metodi ricorsivi Contengono riferimenti espliciti a sé stessi direttamente ricorsivi Un metodo ne invoca un altro e l’esecuzione di quest’ultimo porta ad un certo punto ad invocare nuovamente (direttamente o indirettamente) il metodo originale indirettamente ricorsivi

Ricorsione infinita Requisito fondamentale: chiamata ricorsiva subordinata ad una condizione che ad un certo istante deve divenire non soddisfatta Qualsiasi definizione ricorsiva deve avere una parte non ricorsiva, detta base della ricorsione, che permette alla ricorsione stessa di terminare Nell’esempio precedente del fattoriale la base è 1! che è posto uguale ad 1

Variabili in metodi ricorsivi Ogni invocazione genera un nuovo insieme di variabili locali Ogni parametro riceve un valore iniziale in base alla nuova invocazione Ogni volta che il metodo termina si ritorna al metodo che lo ha chiamato ( che potrebbe essere lo stesso)

Numeri di Fibonacci Schema più complicato di composizione ricorsiva che potrebbe (e dovrebbe) essere tradotto in forma iterativa Definizione: fib0 = 0 fib1 = 1 fibn+1 = fibn + fibn-1

Implementazione ricorsiva int computeFib(int n) { if (n == 0) return 0; if (n == 1) return 1; return computeFib(n-1)+computeFib(n-2); }

Numero di invocazioni 5 4 3 3 2 2 1 2 1 1 1 1 Numero totale di invocazioni cresce esponenzialmente

Implementazione iterativa int computeFib(int n) { int i = 1, x = 1, y = 0; while (i < n) { i = i+1; x = x+ y; y = x -y; } return x;

Considerazioni Ricorsione deve essere evitata se esiste una soluzione iterativa ovvia Non vuol dire evitare la ricorsione a qualunque costo esistono molte buone applicazioni della ricorsione algoritmi per loro natura ricorsivi vanno implementati con metodi ricorsivi

Le torri di Hanoi inventato nel 1880 da Lucas Tre aste (o torri) ed n dischi di dimensioni diverse (con buco per inserirli nelle aste) All’inizio tutti i dischi sono nell’asta 1 in ordine decrescente di grandezza Obiettivo: portarli nella torre 3 rispettando le regole seguenti nessun disco mai sopra uno più piccolo si può spostare un solo disco alla volta dischi sempre collocati su una torre (non a parte) solo disco in cima ad una torre può essere spostato

Algoritmo ricorsivo Obiettivo: spostare k dischi da torre 1 a torre 3 Spostare k-1 dischi da torre originale a torre temporanea Spostare 1 disco da torre originale a torre di destinazione Spostare k-1 dischi da torre temporanea a torre di destinazione

Implementazione 1 void moveTowers(int k, int o,int d) { if (k > 0) moveTowers(k-1, o, 6-o-d); System.out.println("Sposta da "+o+"a"+d); moveTowers(k-1,6-o-d,d); }