Programmazione ricorsiva

Documenti analoghi
RICORSIONE. Informatica B - A.A. 2013/2014

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA INFORMATICA B + C

Matlab: funzioni. Daniele Loiacono, Vittorio Zaccaria

Matlab: Funzioni. Informatica B. Daniele Loiacono

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

CORSO DI PROGRAMMAZIONE

1) Somma dei primi n numeri naturali: 3) Ricerca di un elemento el in una sequenza di interi: FONDAMENTI DI INFORMATICA II Ricorsione 2

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; end

Corso di Fondamenti di Informatica. La ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Iterazione Vs Ricorsione

Programmazione ricorsiva

Iterazione Vs Ricorsione

Ricorsione. Lucidi a cura di Gianpaolo Cugola, Carlo Ghezzi, Gian Pietro Picco Dipartimento di Elettronica e Informazione

La ricorsione. Politecnico di Milano Sede di Cremona

Ricorsione. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

LA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO

Corso di Informatica

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

LA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa

Funzioni e Ricorsione

function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; end

Fondamenti di Informatica II. Algoritmi ricorsivi e Backtracking

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Laboratorio di Programmazione M-Z

Laboratorio di Informatica L-A 1

Ricorsione. La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

L organizzazione dei programmi

La ricorsione. Induzione nel progetto e nella verifica di programmi ricorsivi. Le forme della ricorsione

Capitolo 19. Ricorsione

Operativamente, risolvere un problema con un approccio ricorsivo comporta

Ricorsione in C. slides credit Prof. Paolo Romano

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Pensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna

Iterazione indeterminata

13 Ricorsione con MATLAB

function f = fattoriale(n) f = 1; for ii = 2 : n f = f * ii; end

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

Un po di Matematica. Il volo dei numeri di Mario Merz, un'installazione luminosa sulla Mole Antonelliana, rappresenta la successione di Fibonacci

Ricorsione. Emilio Di Giacomo e Walter Didimo

Record di Attivazione Cenni sulla ricorsione

Esercitazione 6. Array

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Fondamenti di Programmazione

ELEMENTI DI INFORMATICA L. Ing. Claudia Chiusoli

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C

RICORSIONE RICORSIONE

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag.

Università degli Studi di Ferrara

Laboratorio di Python

Lezione 8 programmazione in Java. Anteprima. La ricorsione. Nicola Drago Dipartimento di Informatica Università di Verona

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Ricorsione. Ricorsione. Ricorsione. Walter Cazzola. Dal dizionario Garzanti (

Esempio : i numeri di Fibonacci

Tempo e spazio di calcolo (continua)

3 aprile o Esonero: mercoledi 17 aprile ore 11:30 14:00 consulta la pag. WEB alla voce esoneri. si raccomanda la puntualita!

Programmazione Ricorsione

Istruzioni iterative. Istruzioni iterative

Tempo e spazio di calcolo (continua)

Teoria della computabilità. Appunti tratti dal libro di testo M. Addomine, D. Pons INFORMATICA Zanichelli pag

La Ricorsione. Prima Parte. Giselda De Vita

AA LA RICORSIONE

La Ricorsione. Carla Binucci e Walter Didimo

Dal linguaggio macchina al linguaggio C

Passaggio di Parametri per Valore o Indirizzo

Ricorsione. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Ricorsione. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Algoritmi e Strutture Dati. Capitolo 1 Un introduzione informale agli algoritmi

ALGEBRA 1 Primo esame scritto 4 Luglio 2011 soluzioni

Dott. R. Gori, Dott. A. Rama INFORMATICA 242AA a.a. 2011/12 pag. 1. Le istruzioni iterative permettono di ripetere determinate azioni più volte:

Problema: stampa degli interi compresi tra n e m

Nozioni di base (II Parte)

Roadmap. Ricorsione: funzioni ricorsive. Definizione di fattoriale. Definizione dei numeri Fibonacci

Le Funzioni e la Ricorsione

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmi e Strutture Dati

Fondamenti di Informatica

Fondamenti di Informatica

Come usare la ricorsione

Esempi di programmazione in C

Programmazione ricorsiva.

Sviluppo di progetti. metodologie di soluzione di un problema. iterazione o ricorsione nel pensare per OGGETTI

Programmazione ricorsiva: cenni

LE FUNZIONI RICORSIVE. Cosimo Laneve

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P

Ricorsione: C era una volta un Re

Transcript:

Programmazione ricorsiva Fondamenti di Informatica

Ricorsione q Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che comporta un altra chiamata a P (ricorsione indiretta) q A cosa serve? È una tecnica di programmazione molto potente Permette di risolvere in maniera elegante problemi complessi

Programmazione ricorsiva q Per risolvere un problema attraverso la programmazione ricorsiva sono necessari alcuni elementi Caso base: caso elementare del problema che può essere risolto immediatamente Passo ricorsivo: chiamata ricorsiva per risolvere uno o più problemi più semplici Costruzione della soluzione: costruzione della soluzione sulla base del risultato delle chiamate ricorsive

Esempio: il fattoriale q Definizione: f(n) = n! = n*(n-1)*(n-2)* *3*2*1 q Passo ricorsivo: f(n) = n*f(n-1) q Caso base: f(0)=1 int factric(int n) { return n*factric(n-1); }

Funzionamento ricorsione int ris = factric(3);? ris

Funzionamento ricorsione int ris = factric(3);? ris int factric(int n){ n:3

Funzionamento ricorsione int ris = factric(3);? ris int factric(int n){ n:3 int factric(int n){ n:2

Funzionamento ricorsione int ris = factric(3);? ris int factric(int n){ n:3 int factric(int n){ n:2 int factric(int n){ n:1

Funzionamento ricorsione int ris = factric(3);? ris int factric(int n){ n:3 int factric(int n){ n:2 int factric(int n){ n:1 int factric(int n){ n:0

Funzionamento ricorsione int ris = factric(3);? ris int factric(int n){ n:3 int factric(int n){ n:2 int factric(int n){ return n*1;} n:1

Funzionamento ricorsione int ris = factric(3);? ris int factric(int n){ n:3 int factric(int n){ return n*1;} n:2

Funzionamento ricorsione int ris = factric(3);? ris int factric(int n){ return n*2;} n:3

Funzionamento ricorsione int ris = factric(3); 6 ris

Esempio: Fibonacci q È una sequenza di numeri interi in cui ogni numero si ottiene sommando i due precedenti nella sequenza. I primi due numeri della sequenza sono per definizione pari ad 1. f 1 = 1 f 2 = 1 f n = f n-1 + f n-2 (caso base) (caso base) (passo ricorsivo) int fiboric(int n) { if (n==1 n==2) return fiboric(n-2)+fiboric(n-1); }

Esempio: MCD q Algoritmo di Euclide se m = n, MCD(m,n) = m (caso base) se m > n, MCD(m,n) = MCD(m-n,n) (caso risorsivo) se m < n, MCD(m,n) = MCD(m,n-m) (caso risorsivo) q Esempio: MCD(30,18) 30 18 12 18 12 6 6 6

Esempio: MCD q Algoritmo di Euclide se m = n, MCD(m,n) = m (caso base) se m > n, MCD(m,n) = MCD(m-n,n) (caso risorsivo) se m < n, MCD(m,n) = MCD(m,n-m) (caso risorsivo) q Implementazione int MCDeuclidRic(int m, int n) { if (m==n) return m; if (m>n) return MCDeuclidRic(m-n,n); return MCDeuclidRic(m,n-m); }

Problemi nell uso della ricorsione q Terminazione della catena ricorsiva È presente il caso base? Viene raggiunto sempre dalla catena di chiamate ricorsive? Esempi int factric(int n) { return n*factric(n-1); } int factric(int n) { return factric(n); } Catena infinita di chiamate con argomento decrescente Catena infinita di chiamate identiche

Problemi nell uso della ricorsione q Uso della memoria La programmazione ricorsiva comporta spesso un uso inefficiente della memoria per la gestione degli spazi di lavoro delle chiamate generate In alcuni casi viene comunque preferita ad altri approcci per la sua eleganza e semplicità In altri casi, si può ricorrere ad implementazioni iterative Esempio int fiblist(int n){ int f1=1,f2=1,tmp; for (int i=3; i<=n; i++) { tmp = f2; f2 = f1+f2; f1 = tmp; } return f2; } Funzione iterativa che calcola il numero n di fibonacci