Programmazione Ricorsione
|
|
|
- Gianluca Crippa
- 9 anni fa
- Visualizzazioni
Transcript
1 Programmazione Ricorsione Samuel Rota Bulò DAIS Università Ca Foscari di Venezia.
2 Outline Ricorsione
3 Cos è la ricorsione? In matematica... n! = { n (n 1)! se n > 0 1 altrimenti N = {0} {i + 1 : i N} Principio di induzione P(0) P(n) P(n + 1) per ogni n N P(n) per ogni n N Paradosso di Russell A = {x : x / A}
4 Cos è la ricorsione? In arte... M.C. Escher 1948 M.C. Escher 1956
5 Cos è la ricorsione? In arte... M.C. Escher 1951 M.C. Escher 1961
6 Cos è la ricorsione? In arte matematica.. I frattali sono derivate da equazioni ricorsive su C.
7 Cos è la ricorsione? Nei detti popolari... E nato prima l uovo o la gallina?
8 Cos è la ricorsione? Dal dizionario... Ricorsione. Se ancora non vi è chiaro, vedi: Ricorsione.
9 Cos è la ricorsione? Per google...
10 Cos è la ricorsione? A Mosca...
11 In sostanza... Per imparare la ricorsione dovete prima imparare la ricorsione.
12 Se ancora non è chiaro... La ricorsione consiste nel definire cose in termini di sè stesse. Consente di definire in modo finito quantità infinite. N = {0} {i + 1 : i N} Consente di formulare la soluzione di un problema in funzione delle soluzioni di instanze più piccole dello stesso problema. { n (n 1)! se n > 0 n! = 1 altrimenti
13 Il principio di induzione Immaginiamo di voler verificare una proprietà definita sui naturali N. n n(n + 1) P(n) : i = 2 i=0 Innanzitutto dobbiamo verificare P(0) (caso base): P(0) : 0 = 0 i = i=0 0(0 + 1) 2 = 0
14 Il principio di induzione Successivamente dobbiamo verificare P(n + 1) assumendo P(n) (caso generale o passo induttivo) P(n + 1) : n+1 i = (n + 1) + i=0 = (n + 1) + n i = i=0 n(n + 1) 2 = (n + 1)(n + 2) 2 Per il principio di induzione ora sappiamo che P(n) è vera per ogni n N. P(0) è vera per il caso base P(1) è vera perchè P(0) P(1) per il caso generale P(2) è vera perchè P(1) P(2) per il caso generale...
15 Funzioni ricorsive Una funzione è ricorsiva se utilizza se stessa all interno della propria definizione. Al fine di potersi richiamare, la funzione deve avere un nome (definita con let). possiamo definire una funzione ricorsiva, ovvero abilitata a richiamare se stessa, nel seguente modo: let rec <fun> = fun <arg> -> <expr> [in <expr>] let rec <fun> <arg> = <expr> [in <expr>] Attenzione: è importante che vi sia sempre un caso base per evitare ricorsioni infinite!
16 Esempio per il fattoriale # let rec fattoriale n= if n <= 0 then 1 else n* fattoriale (n-1);; val fattoriale : int -> int = <fun> # fattoriale 10;; - : int = # let rec fattoriale = function 0 -> 1 n -> n * fattoriale(n-1);; val fattoriale : int -> int = <fun> Cosa succede se invochiamo fattoriale (-1);;?
17 Esercizi Scrivere una funzione potenza che calcoli n m, n R +, m N. Scrivere una funzione potenza che calcoli n m, n R +, m Z. Scrivere la funzione di Fibonacci: fib(0) = 0, fib(1) = 1, fib(k) = fib(k 1) + fib(k 2). Scrivere una funzione che calcoli il massimo comun divisore di due naturali positivi (con algoritmo di Euclide). Scrivere una funzione che testi la primalità di un numero intero. Scrivere una funzione ricorsiva per calcolare il resto della divisione intera tra due numeri interi.
18 Esercizi con liste Per risolvere questi esercizi potete utilizzare List.hd: data una lista l ritorna la testa List.tl: data una lista l ritorna la coda List.nth: dati una lista l e un intero i ritorna l i (i-esimo elemento a partire da 0!) List.length: data una lista ritorna la sua lunghezza. Esercizi Scrivere una funzione per invertire una lista. Scrivere una funzione che verifichi se una lista è palindroma (il dritto e il rovescio della lista sono uguali). Scrivere una funzione che calcoli il massimo di una lista. Scrivere una funzione che testi se una lista è monotona crescente o descrescente.
19 Programmazione Ricorsione Samuel Rota Bulò DAIS Università Ca Foscari di Venezia.
Programmazione Ricorsione in coda
Programmazione Ricorsione in coda Samuel Rota Bulò DAIS Università Ca Foscari di Venezia. Outline Ricorsione in coda Ricorsione in coda La ricorsione in coda (o tail-recursion) è un caso speciale di ricorsione
Università Ca Foscari Dipartimento di informatica. Programmazione part-time. Esame Ocaml
Soluzione Università Ca Foscari Dipartimento di informatica Programmazione part-time Esame Ocaml Nome: Matricola: Samuel Rota Bulò, a.a. 2009/2010 Programmazione part-time a.a. 2009/2010 Esame Ocaml Nome:
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
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
Espressioni aritmetiche
Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:
Roadmap. Ricorsione: funzioni ricorsive. Definizione di fattoriale. Definizione dei numeri Fibonacci
Modulo di Roadmap 0. Primi passi con Java 1. Buone abitudini 2. Tipi di dati primitivi 3. Uso di classi 4. Leggere e scrivere 5. Definire metodi 7. Array e Collection 8. Progetto di classi 9. Ereditarietà
Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza
Il principio di induzione Consideriamo inizialmente solo il principio di induzione per i numeri non-negativi, detti anche numeri naturali. Sia P una proprietà (espressa da una frase o una formula che contiene
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
Laboratorio di Python
Problem solving, Ricorsione, Università di Bologna 13 e 15 marzo 2013 Sommario 1 2 3 4 Errore di semantica Esercizio def vocali(s): voc='' for c in s: if c in 'aeiou': voc=voc+c return voc Cerchiamo di
Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici. Ricorsione
Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Ricorsione 1 Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Problema: dati tre numeri interi, calcolarne
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,
Risoluzione di un problema
Algoritmi Risoluzione di un problema Descrizione di un problema! Individuazione di un ALGORITMO! Metodo risolutivo (progetto) Introduzione 2 Algoritmo Sequenza finita di mosse che risolve in un tempo finito
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi
UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi
Laboratorio di Python
Problem solving, Ricorsione, 14 marzo 2014 Sommario 1 2 3 4 Sintassi ed Esempi Esercizi Lunedì il numero di studenti che avevano consegnato gli esercizi era 13. Martedì il numero di esercizi ricevuti,
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
x log(x) + 3. f(x) =
Università di Bari, Corso di Laurea in Economia e Commercio Esame di Matematica per l Economia L/Z Dr. G. Taglialatela 03 giugno 05 Traccia dispari Esercizio. Calcolare Esercizio. Calcolare e cos log d
Esercizi riguardanti limiti di successioni e di funzioni
Esercizi riguardanti iti di successioni e di funzioni Davide Boscaini Queste sono le note da cui ho tratto le esercitazioni del giorno 0 Novembre 20. Come tali sono ben lungi dall essere esenti da errori,
Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi
Lezione 4 Problemi trattabili e soluzioni sempre più efficienti Gianluca Rossi Trattabile o intrattabile? Consideriamo ora il problema, ben noto a tutti gli studenti a partire dalla scuola media, di calcolare
1 Multipli di un numero
Multipli di un numero DEFINIZIONE. I multipli di un numero sono costituiti dall insieme dei prodotti ottenuti moltiplicando quel numero per la successione dei numeri naturali. I multipli del numero 4 costituiscono
Programmazione funzionale
Cognome Nome Matricola Programmazione funzionale 12-09-2014 PROVA SCRITTA 1 2 3 4 5 Somma Il compito ha la durata di 1 ora, per la compilazione attenersi alle seguenti istruzioni: Scrivere in maniera chiara.
PROGRAMMAZIONE: La selezione
PROGRAMMAZIONE: La selezione Prof. Enrico Terrone A. S: 2008/09 Le tre modalità La modalità basilare di esecuzione di un programma è la sequenza: le istruzioni vengono eseguite una dopo l altra, riga per
Ricorsione. Emilio Di Giacomo e Walter Didimo
Ricorsione Emilio Di Giacomo e Walter Didimo Ricorsione La ricorsione è una tecnica di progettazione del software che si basa sull uso di metodi/funzioni ricorsivi/e Un metodo/funzione ricorsivo/a è un
Programmazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 2 - Funzioni Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2.
DIARIO DEL CORSO DI ALGEBRA A.A. 2010/11 DOCENTE: ANDREA CARANTI
DIARIO DEL CORSO DI ALGEBRA A.A. 2010/11 DOCENTE: ANDREA CARANTI Lezione 1. mercoledí 15 settembre 2010 (2 ore) Presentazione del corso. Esercizio: cosa succede a moltiplicare per 2, 3, 4,... il numero
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
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
METODI MATEMATICI PER L INFORMATICA
METODI MATEMATICI PER L INFORMATICA Tutorato Lezione 7 19/05/2016 Corso per matricole congrue a 1 Docente: Margherita Napoli Tutor: Amedeo Leo Ricorsione Esercizio 2 pagina 357 Trovare f(1), f(2), f(3),
Lezione 8 programmazione in Java. Anteprima. La ricorsione. Nicola Drago Dipartimento di Informatica Università di Verona
Lezione 8 programmazione in Java Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Programmazione ricorsiva Fattoriale Somma di n numeri Torre di Hanoi Array
