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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

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

2 2

3 Definizione informale: la ricorsione è un procedimento mediante il quale si definisce una entità in termini di se stessa 3

4 in natura broccolo romanesco 4

5 Triangolo di Sierpinski By Beojan Stanislaus, CC BY-SA 3.0, 5

6 nelle arti visive Immagine sulla confezione del cacao Droste (anno 1904); fonte Wikipedia Copertina dell'album Ummagumma dei Pink Floyd (anno 1969); fonte Wikipedia 6

7 in FINFA

8 Definizione ricorsiva in matematica: Definizione di un concetto usando il concetto stesso Definizione ricorsiva in C: Una funzione che invoca (direttamente o indirettamente) se stessa 8

9 Esempio: successione di Fibonacci Modello (non realistico) di crescita di una popolazione di conigli Una coppia all'inizio del primo mese A partire dal termine del secondo mese di vita, ogni coppia produce un'altra coppia alla fine di ogni mese I conigli non muoiono mai (!) F(n) = coppie al termine del mese n F(1) = 1 F(2) = 1 F(n) = F(n 1) + F(n 2) per ogni n > 2 Leonardo Fibonacci (Pisa, 1170 Pisa, ca. 1250) 9

10 I conigli di Fibonacci

11 Numeri di Fibonacci in natura Il numero di spirali orarie e antiorarie nei fiori di girasole, nelle pigne e in altri vegetali (es., ananas) tendono ad assumere valori appartenenti alla successione di Fibonacci 11

12 Fibonacci in C Metodo ricorsivo per il calcolo della successione di Fibonacci F(1) = 1 F(2) = 1 F(n) = F(n 1) + F(n 2) per ogni n > 2 int fib(int n) if (n <= 2) else return fib(n - 1) + fib(n 2); 12

13 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 13

14 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; Ret int main( void ) printf("%d\n", fib(3)); return 0; 14

15 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; n 3 Ret int main( void ) printf("%d\n", fib(3)); return 0; 15

16 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; n 3 Ret int main( void ) printf("%d\n", fib(3)); return 0; 16

17 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; n1 n?? 3 Ret int main( void ) printf("%d\n", fib(3)); return 0; 17

18 Esempio di esecuzione #include <stdio.h> n1 n Ret?? 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 18

19 Esempio di esecuzione #include <stdio.h> n n1 n 2 Ret?? 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 19

20 Esempio di esecuzione #include <stdio.h> n n1 n 2 Ret?? 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 20

21 Esempio di esecuzione #include <stdio.h> n n1 n 2 Ret?? 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 21

22 Esempio di esecuzione #include <stdio.h> n1 n 1?? 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 22

23 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; n1 n 1 3 Ret int main( void ) printf("%d\n", fib(3)); return 0; 23

24 Esempio di esecuzione #include <stdio.h> n2 n1 n?? 1 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 24

25 Esempio di esecuzione #include <stdio.h> n2 n1 n Ret?? 1 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 25

26 Esempio di esecuzione #include <stdio.h> n n2 n1 n 1 Ret?? 1 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 26

27 Esempio di esecuzione #include <stdio.h> n n2 n1 n 1 Ret?? 1 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 27

28 Esempio di esecuzione #include <stdio.h> n n2 n1 n 1 Ret?? 1 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 28

29 Esempio di esecuzione #include <stdio.h> n2 n1 n 1?? 1 3 Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 29

30 Esempio di esecuzione #include <stdio.h> n2 n1 n Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 30

31 Esempio di esecuzione #include <stdio.h> n2 n1 n Ret int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; int main( void ) printf("%d\n", fib(3)); return 0; 31

32 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; 2 int main( void ) printf("%d\n", fib(3)); return 0; 32

33 Esempio di esecuzione #include <stdio.h> int fib(int n) if (n <= 2) else int n1 = fib(n-1); int n2 = fib(n-2); return n1 + n2; 0 int main( void ) printf("%d\n", fib(3)); return 0; 33

34 Albero delle chiamate ricorsive fib(6) fib(5) fib(4) fib(3) fib(2) fib(2) fib(4) fib(3) fib(2) fib(1) fib(3) fib(2) fib(2) fib(1) fib(1) 34

35 Costo computazionale Sia T(n) il numero di chiamate chiamate alla funzione fib() che servono per calcolare fib(n) 1 chiamata per fib(1) T(1) = 1 1 chiamata per fib(2) T(2) = 1 3 chiamate per fib(3) T(3) = 3 5 chiamate per fib(4) T(4) = 5 T(n) = T(n - 1) + T(n - 2) + 1 fib(3) fib(2) fib(4) fib(3) fib(2) fib(1) fib(2) fib(1) 35

36 Quanto è grande T(n)? Calcoliamo un limite inferiore per T(n) Sfruttiamo il fatto che T(n) è non decrescente, cioè T(n) T(n-1) T (n) = T (n 1)+T (n 2)+1 2 T (n 2)+1 4 T (n 4) T (n 6) k 1 k 2 T (n 2 k )+ 2 i i=0... n/2 n/ n/2 2 36

37 Albero della ricorsione La funzione fib(n) richiede un numero di chiamate ricorsive almeno esponenziale di n La sua inefficienza deriva dal fatto che ricalcola più volte gli stessi valori fib(6) fib(5) fib(4) fib(3) fib(2) fib(2) fib(1) fib(4) fib(3) fib(2) fib(1) fib(3) fib(2) fib(2) fib(1) 37

38 Versione iterativa di fib(n) Possiamo riscrivere fib(n) in forma iterativa, ottenendo una versione molto più efficiente Non è sempre così: le funzioni ricorsive non diventano automaticamente più efficienti se riscritte in modo iterativo int fib(int n) if (n <= 2) else int i, fn; int fn1=1, fn2=1; for (i=3; i<=n; i++) fn = fn1 + fn2; fn2 = fn1; fn1 = fn; return fn; 38

39 Versione iterativa di fib(n) fn2 fn1 fn 1 1 i= i= i= i= int fib(int n) if (n <= 2) else int i, fn; int fn1=1, fn2=1; for (i=3; i<=n; i++) fn = fn1 + fn2; fn2 = fn1; fn1 = fn; return fn; 39

40 La differenza tra un algoritmo di costo Fibonacci ricorsivo Intel 2015 A.D. Fibonacci iterativo Commodore 1982 A.D. fib(10) 0.001s 0.066s fib(20) 0.001s 0.150s fib(30) 0.013s 0.233s fib(50) s 0.400s 40

41 Fattoriale Metodo ricorsivo per il calcolo del fattoriale 0! = 1 n! = n (n 1)! per ogni n > 0 int fatt(int n) if (n == 0) else return n * fatt(n 1); 41

42 Elevamento a potenza potenza(a,n) calcola an per a > 0, n 0 potenza(a, 0) = 1 potenza(a, n) = a potenza(a, n-1), se n > 0 double potenza(double a, int n) if (n == 0) return 1.0; else return a * potenza(a, n-1); Esercizio per casa: scrivere una versione di potenza() che funzioni anche quando n < 0 42

43 Una funzione ricorsiva corretta ha le caratteristiche seguenti Include uno o più casi base, in cui il valore della funzione viene calcolato senza invocare la funzione Include una o più invocazioni ricorsive della funzione; nelle chiamate ricorsive generalmente si usano parametri che "avvicinano" ai casi base 43

44 Attenzione La ricorsione deve terminare Per la successione di Fibonacci, la ricorsione termina nei casi base fib(1) e fib(2) Per il fattoriale, il caso base è fatt(0) Per l'elevamento a potenza, il caso base è potenza(a,0) Ogni chiamata dovrebbe avvicinare al caso base Attenzione, però... /* Per quali valori di n la funzione seguente termina? */ int fun(int n) if ( n == 0 ) else return (n + fun(n-2)); 44

45 Le torri di Hanoi Narra la leggenda che in un tempio indiano si trovi una stanza contenente una lastra di bronzo con sopra tre pioli di diamante. Dopo la creazione dell'universo, 64 dischi d'oro sono stati infilati in uno dei pioli in ordine decrescente di diametro, con il disco più largo appoggiato al piano di bronzo. Da allora, i monaci del tempio si alternano per spostare i dischi dal piolo originario ad un altro piolo, seguendo le rigide regole di Brahma: i dischi vanno maneggiati uno alla volta, e non si deve mai verificare che un disco più largo sovrasti uno più piccolo sullo stesso piolo. Quando tutti i dischi saranno spostati su un altro piolo, l'universo avrà fine. Fonte: George Gamow, One, two, tree... infinity!, Dover Publications,

46 Le torri di Hanoi Gioco matematico tre pioli n dischi di dimensioni diverse Inizialmente tutti i dischi sono impilati in ordine decrescente (più piccolo in alto) nel piolo di sinistra Scopo del gioco Impilare in ordine decrescente i dischi sul piolo di destra Senza mai impilare un disco più grande su uno più piccolo Muovendo un disco alla volta Utilizzando se serve anche il piolo centrale 46

47 src tmp dst Idea Per spostare n dischi dal piolo src al piolo dst, usando tmp come appoggio Se c'è un solo disco Spostalo da src a dst Se ci sono n dischi Sposta gli n - 1 dischi in cima a src verso tmp, usando dst come appoggio Sposta un disco da src a dst Sposta n - 1 dischi in cima a tmp verso dst, usando src come appoggio 47

48 Soluzione ricorsiva per le torri di Hanoi /* hanoi.c */ void hanoi(int src, int dst, int tmp, int n) if (n == 1) printf("muovi da %d a %d\n", src, dst); else hanoi(src, tmp, dst, n-1) printf("muovi da %d a %d\n", src, dst); hanoi(tmp, dst, src, n-1) hanoi(1,3,2,n) sposta n dischi dal piolo 1 al piolo 3, usando il piolo 2 come appoggio n - 1 dischi da src a tmp 1 disco da src a dst n - 1 dischi da tmp a dst 48

49 1 2 3 Esempio con 3 dischi 3 dischi da 1 a 3 2 dischi da 1 a 2 1 disco da 1 a dischi da 2 a 3 1 disco da 3 a disco da 2 a disco da 1 a

50 Numero di chiamate ricorsive void hanoi(int src, int dst, int tmp, int n) if (n == 1) printf("muovi da %d a %d\n", src, dst); else hanoi(src, tmp, dst, n-1) printf("muovi da %d a %d\n", src, dst); hanoi(tmp, dst, src, n-1) Quanti spostamenti sono necessari per risolvere il problema con n dischi? T(1) = 1 T(n) = 2 T(n 1) + 1 per n > 1 Domanda: Quale è la soluzione della ricorrenza? Se i monaci eseguissero una mossa al secondo, per trasferire tutti i 64 dischi servirebbe un tempo pari a circa 127 volte l'età del nostro sole 50

51 Ricerca binaria ricorsiva /* ricerca-binaria-ric.c : versione ricorsiva della ricerca binaria */ #include <stdio.h> int ricbinaria_ric(int v[], int i, int f, int k) if ( i > f ) return -1; /* non trovato */ else int m = (i + f) / 2; if (v[m] == k) return m; /* trovato in posizione m */ else if (v[m] > k) return ricbinaria_ric(v, i, m-1, k); else return ricbinaria_ric(v, m + 1, f, k); int ricbinaria(int v[], int n, int k) return ricbinaria_ric(v, 0, n-1, k); 51

52 mutua (indiretta) Una funzione f1 ne chiama un'altra f2 (che ne chiama un'altra f3 ) che chiama f1 Es.: definiamo, usando la ricorsione mutua, due funzioni pari e dispari che accettano un intero positivo n e ritornano 1 se n è pari (risp. dispari), 0 altrimenti Idea: pari(n) = dispari(n - 1) dispari(n) = pari(n - 1) Base della ricorsione: pari(0) = 1 dispari(0) = 0 52

53 /* pari-dispari.c : determina se un numero e' pari o dispari usando due funzioni mutuamente ricorsive */ #include <stdio.h> /* Dichiarazione delle funzioni pari e dispari */ int pari(int n); int dispari(int n); /* Definizione delle funzioni pari e dispari */ int pari(int n) if (n == 0) else return dispari(n 1); int dispari(int n) if (n == 0) return 0; else return pari(n 1); int main( void ) int i; for (i=0; i<10; i++) printf("%d pari=%d dispari=%d\n", i, pari(i), dispari(i)); return 0; 53

Tecniche Algoritmiche/1 Divide et Impera

Tecniche Algoritmiche/1 Divide et Impera Tecniche Algoritmiche/1 Divide et Impera Ivan Lanese Dipartimento di Informatica Scienza e Ingegneria Università di Bologna Ivan.lanese@gmail.com http://www.cs.unibo.it/~lanese/ Divide-et-impera 2 Tecniche

Dettagli

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

RICORSIONE. Informatica B - A.A. 2013/2014 RICORSIONE Informatica B - A.A. 2013/2014 RICORSIONE Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che comporta

Dettagli

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

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita n! = 1 n( n 1)! se se n n = > 0 0 dove n è un numero intero non negativo Il calcolo del fattoriale

Dettagli

Funzioni e Ricorsione

Funzioni e Ricorsione Funzioni e Ricorsione La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa Nel codice di una funzione ricorsiva compare una (o più di una) chiamata alla funzione stessa

Dettagli

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

Lezione 8 programmazione in Java. Anteprima. La ricorsione. Nicola Drago Dipartimento di Informatica Università di Verona Lezione 8 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Programmazione ricorsiva Fattoriale Somma di n numeri Torre di Hanoi Array

Dettagli

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

Ricorsione. La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa Funzioni e Ricorsione La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa È basata sul principio di induzione matematica: se una proprietà P vale per n=n 0 e si può

Dettagli

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

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

Dettagli

Come usare la ricorsione

Come usare la ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano www.dia.unisa.it/dottorandi/murano 1 Come usare la ricorsione 2 1 Risolvere un problema per ricorsione 1. Pensa ad un problema piu piccolo (di taglia

Dettagli

Esempio : i numeri di Fibonacci

Esempio : i numeri di Fibonacci Esempio : i numeri di Fibonacci La successione di Fibonacci F 1, F 2,... F n,... è definita come: F 1 =1 F 2 =1 F n =F n 1 F n 2,n 2 Leonardo Fibonacci (Pisa, 1170 Pisa, 1250) http://it.wikipedia.org/wiki/leonardo_fibonacci

Dettagli

Iterazione Vs Ricorsione

Iterazione Vs Ricorsione Iterazione Vs Ricorsione Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 7 Gennaio 2014 Nota per i 7 Cosa: Prova colpo-singolo No libri, e/o appunti 1 exe in C in 30 Quando Domani:

Dettagli

Programmazione II Università di Roma "La Sapienza" Appunti a cura della Prof.ssa FACHINI. Ricorsione per il "problem solving" Il problema del cambio.

Programmazione II Università di Roma La Sapienza Appunti a cura della Prof.ssa FACHINI. Ricorsione per il problem solving Il problema del cambio. Programmazione II Università di Roma "La Sapienza" Appunti a cura della Prof.ssa FACHINI Ricorsione per il "problem solving" Il problema del cambio. Consideriamo il problema di determinare in quanti modi

Dettagli

Ricorsione. quindi si può definire n! mediante i seguenti due punti:

Ricorsione. quindi si può definire n! mediante i seguenti due punti: Ricorsione Due definizioni del fattoriale Prima definizione: n! = 1 2 3....(n-1) n Per la seconda definizione notiamo che 1 2 3.... n = (n-1)! n (n-1)! quindi si può definire n! mediante i seguenti due

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A Ingegneria e Scienze Informatiche - Cesena A.A. 2013-2014 dilena@cs.unibo.it, pietro.dilena@unibo.it Note introduttive sul corso Modalità d esame Note introduttive sul corso Finalità: fornire competenze

Dettagli

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di

Dettagli

Gestione della memoria

Gestione della memoria Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati Giovedì 13 ottobre 2016 1 Esercizi introduttivi 1.1 Potenza Scrivete una funzione avente due parametri interi b ed e che calcoli la potenza

Dettagli

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

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino La ricorsione Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario! Definizione di ricorsione e strategie divide et impera! Semplici algoritmi ricorsivi! Merge

Dettagli

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

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,

Dettagli

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

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita n! = 1 n( n 1)! se se n n = > 0 0 dove n è un numero intero non negativo Il calcolo del fattoriale

Dettagli

L organizzazione dei programmi

L organizzazione dei programmi L organizzazione dei programmi Lo sviluppo top-down L.S. Touschek - A.S. 2015/2016 - I fondamenti del Linguaggio C F. Cardarelli Lo sviluppo top-down I problemi complessi Blocco 1 Istruzione 1 Istruzione

Dettagli

Ricorsione. Ricorsione. Ricorsione. Walter Cazzola. Dal dizionario Garzanti (www.garzantilinguistica.it).

Ricorsione. Ricorsione. Ricorsione. Walter Cazzola. Dal dizionario Garzanti (www.garzantilinguistica.it). Outline vs Iterazione. Walter Cazzola Dipartimento di Informatica e Comunicazione Università degli Studi di Milano Definizioni La ricorsione come strumento di programmazione implementazione di metodi ricorsivi

Dettagli

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

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C La ricorsione Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C 2 Divide et impera Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici I risultati

Dettagli

Il Piacere della Logica. La Torre di Hanoi. Il Piacere della Logica. Prof. Ivano Coccorullo

Il Piacere della Logica. La Torre di Hanoi. Il Piacere della Logica. Prof. Ivano Coccorullo La Torre di Hanoi Le Torri di Hanoi Il problema delle Torri di Hanoi deriva da una antica leggenda indiana che recita così: «nel grande tempio di Brahma a Benares, su di un piatto di ottone, sotto la cupola

Dettagli

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

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione INFORMATICA B Ingegneria Elettrica La ricorsione Ricorsione Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che

Dettagli

Programmazione a moduli in C

Programmazione a moduli in C Funzioni Programmazione a moduli in C Politecnico di Milano Motivazioni Alcuni programmi possono essere molto, molto complessi E utile poter partizionare il lavoro di progettazione in sottolavori più semplici

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli

Dettagli

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. La Ricorsione. Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 29 Maggio 2014

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. La Ricorsione. Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 29 Maggio 2014 La Ricorsione Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 29 Maggio 2014 Obiettivi La ricorsione Ricordate la sigla GNU GNU = GNU is Not Unix GNU = GNU is Not Unix GNU = GNU is

Dettagli

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch Esercitazione 5 Procedure e Funzioni Il comando condizionale: switch Comando: switch-case switch (espressione) { /* espressione deve essere case costante1: istruzione1 di tipo int o char */ [break]; case

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione informale di algoritmo Insieme di istruzioni, definite

Dettagli

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

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1 Parte 2 Ricorsione - AA. 2012/13 [M.C.Escher Drawing hands, 1948] 2.1 Funzioni ricorsive Una funzione si dice ricorsiva se richiama se stessa, direttamente o indirettamente La ricorsione si dice diretta

Dettagli

Capitolo 19. Ricorsione

Capitolo 19. Ricorsione Capitolo 19 La ricorsione Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a sé stessa Esempio: Funzione fattoriale su interi non negativi: f(n) = n!

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Informazioni sul corso + Un introduzione informale agli algoritmi Domenico Fabio Savo 1 Domenico Fabio Savo Email: savo@dis.uniroma1.it Web: http://www.dis.uniroma1.it/~savo

Dettagli

Gocce di Java. Gocce di Java. Metodi e ricorsione. Pierluigi Crescenzi. Università degli Studi di Firenze

Gocce di Java. Gocce di Java. Metodi e ricorsione. Pierluigi Crescenzi. Università degli Studi di Firenze Gocce di Java Pierluigi Crescenzi Università degli Studi di Firenze Ancora sui metodi Interfaccia di un metodo Consente di utilizzarlo senza sapere nulla dell implementazione Consente di implementarlo

Dettagli

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 5 Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Ricorsione. Corso di Fondamenti di Informatica

Ricorsione. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Ricorsione Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e

Dettagli

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento lunedì, prima o dopo lezione 1 Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità

Dettagli

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

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag. I lucidi sono una rielaborazione e integrazione di quelli messi a disposizione dei docenti nel sito relativo al testo: Informatica: arte e mestiere 2/ed Stefano Ceri, Dino Mandrioli, Licia Sbattella Copyright

Dettagli

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi

Dettagli

I numeri rossi sulla Mole Antonelliana a Natale. Algoritmi e Laboratorio a.a Lezioni. Le regole della riproduzione dei conigli.

I numeri rossi sulla Mole Antonelliana a Natale. Algoritmi e Laboratorio a.a Lezioni. Le regole della riproduzione dei conigli. I numeri rossi sulla Mole Antonelliana a Natale Università di Torino acoltà di Scienze MN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 29- Lezioni prof. Elio

Dettagli

Ricorsione. (da lucidi di Marco Benedetti)

Ricorsione. (da lucidi di Marco Benedetti) Ricorsione (da lucidi di Marco Benedetti) Funzioni ricorsive Dal punto di vista sintattico, siamo in presenza di una funzione ricorsiva quando all interno della definizione di una funzione compaiono una

Dettagli

Fondamenti di Programmazione

Fondamenti di Programmazione Fondamenti di Programmazione 1 Programmazione Concetti base: dati istruzioni Dati: variabili tipi Istruzioni: istruzioni base strutture di controllo sotto-programmi 2 Sotto-programmi Necessità di scomporre

Dettagli

Corso di Laurea in Matematica

Corso di Laurea in Matematica Corso di Laurea in Matematica Laboratorio di Informatica (a.a. 2003-04) Esercizi di programmazione in C: funzioni e procedure 1 Docente: Monica Nesi Nota Nelle soluzioni di alcuni degli esercizi riportati

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Tecniche Algoritmiche

Tecniche Algoritmiche Tecniche Algoritmiche Damiano Macedonio Università Ca' Foscari di Venezia mace@unive.it Original work Copyright Alberto Montresor, Università di Trento, Italy Modifications Copyright 2009 2012 Moreno Marzolla,

Dettagli

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione Linguaggio C: Stack e Ricorsione FUNZIONI: IL MODELLO A RUN-TIME Ogni volta che viene invocata una funzione: si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri

Dettagli

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi: FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi

Dettagli

Definizione di metodi in Java

Definizione di metodi in Java Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Seconda lezione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Dottoressa Sara Zuppiroli - sara.zuppiroli@unibo.it L'importanza di capire Perché non dobbiamo dichiarare

Dettagli

Il linguaggio C. Funzioni

Il linguaggio C. Funzioni 1 Il linguaggio C Funzioni Funzioni C A cosa servono? a raccogliere il codice comune a più parti del programma per poterlo defininire e mettere a punto una volta per tutte Es: ho replicato 37 volte il

Dettagli

Si dice che q è il quoziente e r è il resto della divisione di a per b. Inotre, si ha: c = qa. Quindi b ± c = pa ± qa = (p ± q)a e pertanto a (b ± c).

Si dice che q è il quoziente e r è il resto della divisione di a per b. Inotre, si ha: c = qa. Quindi b ± c = pa ± qa = (p ± q)a e pertanto a (b ± c). I numeri interi Teorema 1 (divisione in Z) Siano a, b Z, b 0 Allora esistono e sono unici q, r Z tali che (1) a = bq + r () 0 r < b Si dice che q è il quoziente e r è il resto della divisione di a per

Dettagli

La ricorsione. cioè la tesi vale per n + 1. Se ne conclude che vale per ogni n.

La ricorsione. cioè la tesi vale per n + 1. Se ne conclude che vale per ogni n. La ricorsione 1. Induzione e definizioni ricorsive Una definizione che adoperasse il concetto stesso che intende definire sarebbe considerata circolare e dunque vuota, per le stesse ragioni per cui non

Dettagli

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

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente: Pag 29 4) La ricorsione 4.1 Funzioni matematiche ricorsive Partiamo da un concetto ben noto, quello delle funzioni matematiche ricorsive. Una funzione matematica è detta ricorsiva quando la sua definizione

Dettagli

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Esempi di Problemi Iterativi

Esempi di Problemi Iterativi Corso di Laurea Ingegneria Civile Elementi di Informatica Esempi di Problemi Iterativi C. Limongelli Esempi di Problemi Iterativi 1 Contenuti Esercizi: Palindroma Anagramma Fibonacci Esempi di Problemi

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione 30 novembre 2007 Sequenze di Collatz Considerate la seguente regola: dato un numero intero positivo n, se n è pari lo si divide per 2, se è dispari lo si moltiplica per 3

Dettagli

Esercitazione 2. Corso di Fondamenti di Informatica

Esercitazione 2. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 2 Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Ricerca Automatica. Esercitazione 3. Intelligenza Artificiale Daniele Nardi, 2004 Esercitazione 3 0

Ricerca Automatica. Esercitazione 3. Intelligenza Artificiale Daniele Nardi, 2004 Esercitazione 3 0 Ricerca Automatica Esercitazione 3 Intelligenza Artificiale Daniele Nardi, 2004 Esercitazione 3 0 Ascensore In un grattacielo ci sono 3 coppie formate da marito e moglie. Il cancello delle scale viene

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla http://www.moreno.marzolla.name/ Ultima Modifica: 7 ottobre 202 Copyright Portions of this work are Copyright 202, Moreno Marzolla. This work is licensed

Dettagli

Laboratorio di Programmazione M-Z

Laboratorio di Programmazione M-Z Diretta Laboratorio di Programmazione M-Z Docente: Dott.ssa Alessandra Lumini alessandra.lumini@unibo.it Università di Bologna, Sede di Cesena Divide et impera Dividere un problema in sottoproblemi più

Dettagli

LE FUNZIONI III PARTE. Manuale linguaggio C

LE FUNZIONI III PARTE. Manuale linguaggio C LE FUNZIONI III PARTE Manuale linguaggio C Divide et impera Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici. I risultati ottenuti risolvendo i problemi

Dettagli

Appunti senza pretese di P2+Lab: Pensare ricorsivamente, programmare iterativamente

Appunti senza pretese di P2+Lab: Pensare ricorsivamente, programmare iterativamente Appunti senza pretese di P2+Lab: Pensare ricorsivamente, programmare iterativamente Alessandro Panconesi DSI, La Sapienza via Salaria 113, piano terzo 00198 Roma In queste dispense ci occuperemo di un

Dettagli

Corso di Fondamenti di Informatica. La ricorsione

Corso di Fondamenti di Informatica. La ricorsione Corso di Fondamenti di Informatica La ricorsione La ricorsione Si dice che un oggetto (una struttura dati, una funzione matematica, un concetto ) è ricorsivo se è possibile darne una definizione in termini

Dettagli

Le Funzioni e la Ricorsione

Le Funzioni e la Ricorsione Aula V Dip. di Matematica G. Castelnuovo Univ. di Roma La Sapienza Le Funzioni e la Ricorsione Igor Melatti Slides disponibili (assieme ad altro materiale) in: http://www.dsi.uniroma1.it/ melatti/programmazione1.2007.2008.html

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Definizione informale di algoritmo Insieme di istruzioni, definite passo per passo, in modo da poter essere eseguite meccanicamente

Dettagli

Esercitazione 7. Procedure e Funzioni

Esercitazione 7. Procedure e Funzioni Esercitazione 7 Procedure e Funzioni Esercizio Scrivere un programma che memorizza in un array di elementi di tipo double le temperature relative al mese corrente e ne determina la temperatura massima,

Dettagli

Matlab/Octave - Esercitazione 11

Matlab/Octave - Esercitazione 11 Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti Matlab/Octave - Esercitazione 11 programmazione ricorsiva Politecnico di Milano - DEI Informatica B - Esercitazione

Dettagli

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Ricorsione Funzioni ricorsive Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Un esempio di funzione ricorsiva

Dettagli

Esercitazione 6. Array

Esercitazione 6. Array Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione

Dettagli

Esempi di Problemi Iterativi

Esempi di Problemi Iterativi Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E07 C. Limongelli Dicembre 2011 1 Contenuti q Esercizi: Palindroma Anagramma Fibonacci 2 Palindroma q Scrivere un programma che

Dettagli

Linguaggio C: Espressioni

Linguaggio C: Espressioni Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 Ringraziamenti prof. Mirko Viroli, Università

Dettagli

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

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012 Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Operatore? Tipo di dato: struct La ricorsione Funzioni ricorsive Esercizi proposti 26/04/2012 2 Operatore? L'operatore? può essere

Dettagli

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Quanto costa? Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Cosa contribuisce

Dettagli

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 18/7/2016

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 18/7/2016 Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 18/7/2016 Chi deve recuperare il progetto del modulo 1 ha 1 ora e 30 minuti per svolgere gli esercizi 1, 2, 3 Chi deve recuperare

Dettagli

Il linguaggio C Il modello a run-time

Il linguaggio C Il modello a run-time 3 Il linguaggio C Il modello a run-time Puntatore al codice Return address Link dinamico Parametro Parametro 2... Variabile locale Variabile locale 2... B A A 3 FUNZIONI: IL MODELLO A RUN-TIME Ogni volta

Dettagli

Studio delle successioni con il software

Studio delle successioni con il software Studio delle successioni con il software Abbiamo visto due possibili definizioni per alcune successioni: diretta e per ricorrenza (o ricorsiva). Ricordiamo che la successione delle somme dei primi n numeri

Dettagli

Programmazione di base

Programmazione di base Fondamenti di Informatica Primo Appello 01-17 8 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene 10 domande,

Dettagli

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento

Dettagli

La principale modalità di calcolo è l applicazione di funzioni

La principale modalità di calcolo è l applicazione di funzioni 1 La principale modalità di calcolo è l applicazione di funzioni Nei linguaggi funzionali puri non esistono strutture di controllo predefinite per la realizzazione di cicli quali for, while, repeat Un

Dettagli

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione Sequenze di cifre Esercizio 1 - cicli Realizzare un programma che prende in input una sequenza di cifre (tra 1 e 9) e calcola la somma massima fra le sotto- sequenze di cifre non decrescente Il programma

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Programmazione dinamica

Programmazione dinamica Programmazione dinamica Primi esempi 29 ottobre 2014 Punto della situazione Abbiamo visto: analisi asintotica relazioni di ricorrenza (vedremo altri esempi) prima tecnica di programmazione: divide-etimpera

Dettagli

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3 RICORSIVITA 1. Cos è la ricorsività? La ricorsività è un metodo di soluzione dei problemi che consiste nell esprimere la soluzione relativa al caso n in funzione della soluzione relativa al caso n-1. La

Dettagli

Algoritmi e strutture di dati 2

Algoritmi e strutture di dati 2 Paola Vocca Lezione 4: Programmazione dinamica 1 Caratteristiche Programmazione dinamica: paradigma basato sullo stesso principio utilizzato per il divide et impera o il problema viene decomposto in sotto-problemi

Dettagli

UNIVERSITÀ DEGLI STUDI DI TRIESTE

UNIVERSITÀ DEGLI STUDI DI TRIESTE UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI ECONOMIA APPUNTI SUGLI ALGORITMI ANNO ACCADEMICO 2007-2008 Renato Pelessoni 1 ALGORITMI Un algoritmo è un insieme finito di istruzioni che consente di risolvere

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

L'anno scorso abbiamo parlato della disposizione delle parti di una pianta: i flosculi nei capolini delle Composite...

L'anno scorso abbiamo parlato della disposizione delle parti di una pianta: i flosculi nei capolini delle Composite... Numeri e piante due mondi a confronto L'anno scorso abbiamo parlato della disposizione delle parti di una pianta: i flosculi nei capolini delle Composite... Echinacea purpurea Le spirali orarie sono 55

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false; Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i

Dettagli

Fondamenti di Informatica II. Algoritmi ricorsivi e Backtracking

Fondamenti di Informatica II. Algoritmi ricorsivi e Backtracking Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Algoritmi ricorsivi e Backtracking Introduzione

Dettagli

La ricorsione. Politecnico di Milano Sede di Cremona

La ricorsione. Politecnico di Milano Sede di Cremona La ricorsione Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Definizioni ricorsive Sono comuni

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 8 gennaio 8 Il problema è simile all esercizio 5.6 del libro di testo di algoritmi (Introduzione agli algoritmi e strutture dati, T.

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 8 luglio 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Esempio di Prova Scritta

Esempio di Prova Scritta Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 10 punti (durata:circa 1h15 ). Le tipologie di esercizi possibili comprendono:! sintesi di una funzione ricorsiva/iterativa,

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

Note per la Lezione 6 Ugo Vaccaro

Note per la Lezione 6 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,

Dettagli

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Algoritmi esponenziali

Algoritmi esponenziali Algoritmi esponenziali Algoritmi esponenziali Supponiamo che f(n) sia la funzione che rappresenta il numero di operazioni eseguite da un algoritmo e supponiamo che il tempo necessario per compiere una

Dettagli