Ricorsione. quindi si può definire n! mediante i seguenti due punti:
|
|
- Agostina Donata Pesce
- 6 anni fa
- Visualizzazioni
Transcript
1 Ricorsione Due definizioni del fattoriale Prima definizione: n! = (n-1) n Per la seconda definizione notiamo che n = (n-1)! n (n-1)! quindi si può definire n! mediante i seguenti due punti: n! = 1 se n? 1 n! = n (n-1)! se n > 1 (definizione mediante equazioni di ricorrenza)
2 la prima definizione non è molto rigorosa (cosa vuol dire....?) La seconda invece è matematicamente ineccepibile. Anzi può essere usata come metodo meccanico per il calcolo del fattoriale. Per esempio: 4! = 4 3! (3 >1) = 4 3 2! (2 >1) = ! = = 24 Nota: in notazione più informatica si può scrivere: fact(n) = 1 se n? 1 fact(n) = n fact(n-1) se n > 1
3 Versione JAVA public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n)); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1);
4 Simulazione (sia dato 4 in input) public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ;
5 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact
6 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact
7 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact(2) fact(1) n: 3
8 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact(2) fact(1) n: 3
9
10 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; fact(3) fact(2) fact(1) n: 2 n: 3
11 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; (ritorna 1) fact(4) fact(3) fact(2) fact(1) n: 1 n: 2 n: 3
12 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; 1 (ritorna 2) fact(3) fact(2) fact(1) n: 2 n: 3
13 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; 2 (ritorna 6) fact(2) fact(1) n: 3
14 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; 6 (ritorna 24) fact(1)
15 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); 24 public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ;
16 public class FactTest {public static void (String [] args) n= In.readInt("n: "); System.out.println(fact(n) ); public static long fact(int n) {if (n<=1) return 1; return n * fact(n-1) ; il programma termina stampando 24.
17 Riassumendo in un metodo ricorsivo ci devono sempre essere queste due componemti: un caso semplice (per esempio il caso n<=1), che non richiede la chiamata ricorsiva del metodo stesso. un caso ricorsivo in cui il metodo viene richiamato, su paramtri che siano, in qualche modo, più semplici. Più semplici vuole soltanto dire che porteranno, prima o poi, al caso elementare.
18 Esempio: stampa di un numero in binario Idea del procedimento: prendiamo (rapp. binaria di 11) Fatti generali: 5 in bin l ultima cifra di n in binario è 0 se n è pari 1 se n è dispari. le cifre precedenti sono la rappresentazione in binario di n/2 (divisione intera)
19 tradotto in ragionamento ricorsivo questo diventa: Per stampare n in binario: se n<2 stampa n. altrimenti stampa n/2 (intero) in binario e poi stampa n%2 (cioè 0 se n è pari, 1 se n è dispari).
20 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; System.out.print(n%2); return; n: 5
21 public class WriteBinary Output: { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
22 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5 nota: 5/2=2
23 public class WriteBinary Output: { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
24 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5 nota:2/2 = 1
25 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: printbinary(3) n: 1 public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
26 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: 1 printbinary(3) n: 1 public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
27 public class WriteBinary Output: 1 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
28 public class WriteBinary Output: 10 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) printbinary(2) n: 2 {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
29 public class WriteBinary Output: 10 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
30 public class WriteBinary Output: 101 { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; printbinary(1) n: 5 System.out.print(n%2); return; n: 5
31 public class WriteBinary { public static void (String [] args) n= In.readInt("n: "); printbinary(n) ; System.out.println(); Output: 101 public static void printbinary(int n) {if (n<2) {System.out.print(n); return; printbinary(n/2) ; System.out.print(n%2); return; Il programma termina. l output è 101. n: 5
32 Una versione iterativa di printbinary. public static void printbinary(int n) {int[] x = new int[30]; int i; for (i=0;n>0;i++) {x[i] = n%2 ; n = n/2; i--; for (i=i; i>=0;i--) System.out.print(x[i]); return; notare come il metodo iterativo abbia una struttura più complessa.
33 I numeri di Fibonacci Fibonacci e i conigli: ogni coppia di conigi diventa feconda dopo un mese dalla nascita mesi 0 1? 0 coppie di conigli 1 coppia di conigli ? 1 coppia di conigli?????????? 2 coppie di conigli 3 coppie di conigli 4 coppie di conigli in generale: conigli(0) = 0 conigli(1) = 1 conigli(n) = conigli(n-1) + conigli(n-2) (n>1)
34 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); supponiamo 4 in input public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib 1
35 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(1) fib 2
36 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(2) fib(1) n: 3 fib 3
37 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(3) fib(2) fib(1) n: 2 n: 3 fib 4
38 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(4) fib(3) fib(2) fib(1) n: 1 n: 2 n: 3 fib 5
39 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 fib(3) fib(2) fib(1) n: 2 ricorda 1 n: 3 fib 6
40 public class FibRic {public static void (String [] args)
41 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 0 fib(3) fib(2) fib(1) n: 2 ricorda 1 n: 3 fib 8
42 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 fib(2) fib(1) n: 3 ricorda 1 fib 9
43 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(3) fib(2) fib(1) n: 1 n: 3 ricorda 1 $3 fib 10
44 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 1 fib(2) fib(1) n: 3 ricorda 1 fib 11
45 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 2 fib(1) ricorda 2 fib 12
46 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(2) fib(1) n: 2 ricorda 2 $3 fib 12
47 public class FibRic {public
48 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 fib(2) fib(1) n: 2 ricorda 1 ricorda 2 $3 fib 14
49 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib(3) fib(2) fib(1) n: 0 n: 2 ricorda 1 ricorda 2 $3 $3 fib 15
50 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 1 0 fib(2) fib(1) n: 2 ricorda 1 ricorda 2 $3 fib 16
51 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; 2 1 fib(1) ricorda 2 fib 17
52 public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); Il programma JAVA per fib - versione ricorsiva 3 public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; fib 18
53 Il programma JAVA per fib - versione ricorsiva public class FibRic {public static void (String [] args) n= AConsoleReader.readInt("n: "); System.out.println(fib(n) ); public static longfib(int n) {if ((n==0) (n==1)) return n; return fib(n-1) +fib(n-2) $3 ; Il programma stampa 3 e termina. fib 19
54 Nota: i risultati parziali di alcune espressioni (tipicamente in questo caso i risultati di fib(n-1) scritti in verde) possono essere ricordati nel frame in cui vengono calcolati. Questo processo è invisibile all utente e viene gestito interamente dal compilatore. Però ora dimentichiamo pure tutto. Quello che importa è sapere che per scrivere un metodo si può assumere di averlo già disponibile, purchè lo si usi su dei dati, in qualche modo, più semplici. Più semplici vuole soltanto dire che porteranno, prima o poi, al caso elementare.
55 Possibili problemi (nascosti) della ricorsione - Il numero di frames per uno stesso metodo allocati contemporaneamente sullo stack può diventare molto grande e causare uno stack overflow. E difficile che accade se la ricorsione è usata in modo classico. - L allocazione di un frame costa comunque tempo: di questo bisogna a volte tenerne conto. - Può capitare (senza accorgersene) di ripetere (nello stesso programma) la chiamata di un metodo sugli stessi dati: l effetto puo essere impressionante! Se possibile evitare questo!
56 Esempio: Figura 5 Schema delle invocazioni del metodo ricorsivo fib su 6 notare le duplicazioni delle chiamate sullo stesso parametro.
57 Si può facilmente vedere che il numero di chiamate ricorsive per calcolare fib(n) è superiore a fib(n) stesso. 1? 5 Ora fib(n) si può approssmare con? n dove? =. 2 per esempio fib(30)? fib(40)? fib(50)? (crescita esponenziale!) - Il programma iterativo, invece, ripete un ciclo n volte per calcolare fib(n).
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!
DettagliRICORSIONE. 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
DettagliRicorsione. 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
DettagliProgrammazione 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,
Dettagli7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
DettagliFondamenti 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
DettagliDefinizione 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
DettagliLa 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
DettagliLaboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
DettagliFUNZIONI 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
DettagliArchitetture dei Calcolatori
Architetture dei Calcolatori Lezione 11 -- 10/12/2011 Procedure Emiliano Casalicchio emiliano.casalicchio@uniroma2.it Fattoriale: risparmiamo sull uso dei registri q Rispetto alla soluzione precedente
DettagliTempo 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
DettagliEsempi 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
DettagliGestione della memoria in Java DRAFT 1.2
Gestione della memoria in Java DRAFT 1.2 Programmazione II - a.a. 2001/02 April 4, 2002 AVVERTIMENTO Queste note vogliono solo costituire un supporto di aiuto per la comprensione dei fondamenti di Java.
Dettaglipublic 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
DettagliLaboratorio di Programmazione 1 [Java]
Laboratorio di Programmazione 1 [Java] Prova di esame - 26 Gennaio 2011 Tempo massimo: 50 minuti Si implementino in Java le classi Tavolo e Pizzeria. La classe Tavolo ha i seguenti attributi: nome (una
DettagliEsempi 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
DettagliIl 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
DettagliINFORMATICA 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à
DettagliTempo 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
DettagliEsercizi 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
DettagliI 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
DettagliCorso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1
Corso di Laurea Ingegneria Civile Elementi di Informatica Esercizi Carla Limongelli Esercizi 1 Quanti giorni in un mese? Scrivere un metodo che ricevuto in input un mese e un anno, restituisca il numero
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 1
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E03 Esempi di algoritmi e programmi A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di algoritmi e
Dettaglin 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
DettagliLe 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
DettagliRoadmap. 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à
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E03 Esempi di algoritmi e programmi A. Miola Novembre 2011 1 Contenuti q Progettazione di algoritmi q Problemi di ingresso - uscita
DettagliCorso 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
DettagliMetodi statici. Dichiarazione e chiamata di metodi statici
Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un
DettagliUn 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
DettagliCorso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Esercizi sui metodi Carla Limongelli Maggio 2010 Esercizi 1 Passaggio di parametri di tipo primitivo Indicare che cosa viene visualizzato sullo
Dettagli19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
DettagliCorso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010
Esercizio 1. Si deve modellare con una classe Java il contenuto di un portamonete, con delle opportune semplificazioni. Le monete da considerare sono di soli 4 tagli: 10, 20, 50 e 100 centesimi (cioè 1
DettagliLaboratorio 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
DettagliLa 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
DettagliLezione 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
DettagliAlgoritmi 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
DettagliProblemi, algoritmi e oggetti
Fondamenti di informatica Oggetti e Java Luca Cabibbo Capitolo 5 Marzo 2007 1 Fondamenti di informatica: Oggetti e Jav Contenuti... Problemi e algoritmi comprensione del problema identificazione di un
DettagliLaboratorio di Programmazione 1 [Java]
Laboratorio di Programmazione 1 [Java] Prova di esame - 7 Settembre 2010 Tempo massimo: 50 minuti Si implementino in Java le classi Tavolo e Ristorante. La classe Tavolo ha i seguenti attributi: numero
DettagliEsercitazione 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
DettagliProgrammazione, 5 a lezione
Programmazione, 5 a lezione Eugenio Omodeo Dipartimento di Matematica e Informatica, Università degli Studi di Trieste. Trieste, 12.10.2010 Esecuzione sequenziale I All avvio di un programma, il processo
DettagliIntroduzione al C++ (continua)
Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x
DettagliLaboratorio 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
DettagliAA 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
DettagliAlgoritmi 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
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliLaboratorio 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ù
DettagliAlgebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi.. 2010/2011 Sommario Conversione di tipo:casting Tipo enumerativo lgebra Booleana Esercizi Conversione di tipo:casting Il casting o conversione di tipo avviene
DettagliFondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso
Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso AA 2015/2016 Tutor: Vincenzo Lomonaco vincenzo.lomonaco@unibo.it Programma Introduzione al calcolatore
DettagliIntroduzione Programmazione Java
Introduzione Programmazione Java Paolo Tomeo paolo.tomeo@poliba.it Regole basilari Java è case sensitive quindi prestare attenzione alle maiuscole Il commento si inserisce con // all'inizio della linea
DettagliClassi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array
Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a
Dettagli9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E04 Esercizi sui problemi di ordinamento C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Algoritmi di Ordinamento
DettagliGESTIONE DEGLI ERRORI
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori
DettagliLE 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
DettagliEsempio 2: Subtyping
Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione
DettagliLa 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
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 1
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E04 Esempi di algoritmi e programmi C. Limongelli - A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi
DettagliAlgoritmi 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
DettagliTecniche 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
DettagliAlgoritmi 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
DettagliEsempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Eccezioni Categorie di eccezioni checked unchecked Gestione delle eccezioni Clausola throws Costrutto try - catch - finally Comando
DettagliCorso 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
DettagliInformatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1
Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 1) Il bus in un computer trasporta a) solo dati b) solo istruzioni c) sia dati sia istruzioni 2) In una sequenza
DettagliDIPARTIMENTO 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
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 27 novembre 2007 In C una stringa è rappresentata da una sequenza di caratteri terminante con il carattere nullo \0 il cui valore è
DettagliCompitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
Dettagli6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzioni di controllo Iterative Condizionali Algoritmi e Diagrammi di flusso Esercizi 28/03/2011 2 Istruzioni iterative while do
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
Dettagli5 - Istruzioni condizionali
5 - Istruzioni condizionali Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
DettagliFondamenti 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
DettagliFondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Passaggio dei parametri per valore/riferimento 2. Trattamento degli errori: funzioni che restituiscono anche codici di errore
DettagliProgrammazione 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
DettagliEsempio : 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
Dettaglin 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
DettagliStudio 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
DettagliEsercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }
Java è un linguaggio di programmazione c indipendente dalla piattaforma, ovvero un linguaggio di programmazione che permette di compilare i programmi una volta sola e di installarli su computer che usano
DettagliIL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
DettagliLa codifica dei numeri
La codifica dei numeri La rappresentazione dei numeri con il sistema decimale può essere utilizzata come spunto per definire un metodo di codifica dei numeri all interno degli elaboratori: la sequenza
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
DettagliLaboratorio di Programmazione Lezione 4. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 4 Cristian Del Fabbro Prossima lezione Mercoledì 25 novembre ore 8:30-11:00 Classe Una classe descrive degli oggetti tramite: Proprietà/variabili/campi (dati/caratteristiche,
DettagliDall analisi alla codifica (1)
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 09 Dall analisi alla codifica (1) Aprile 2010 Dall'analisi alla codifica (1) 1 Contenuti... Problemi e algoritmi comprensione del problema
DettagliParte 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
DettagliProgrammazione 1 A.A. 2015/2016
Cognome e Nome Matricola Programmazione 1 A.A. 2015/2016 Appello del 16 Dicembre 2015 Compito n 1 Prima parte Esercizio 1 (10 punti) Cosa stampa il seguente frammento di codice Java? int[] A = {3, 8, 91,
DettagliEsercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona.
Esercizio 3 Scrivere un programma con i seguenti requisiti. Utilizzare una classe Persona che dichiara le variabili nome, cognome, età. Si dichiari inoltre un metodo dettagli() che restituisce in una stringa
Dettagli18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
DettagliCosto 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
DettagliJava, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM
Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM ERRATA CORRIGE dei programmi della prima stampa (Aprile 2004) aggiornato al 20/05/2017 Nota: il codice corretto è ottenibile da quella errato
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
DettagliTIPI PRIMITIVI: LIMITI
TIPI PRIMITIVI: LIMITI I tipi primitivi sono i "mattoni elementari" del linguaggio In varie situazioni può però essere necessario trattare i tipi primitivi come oggetti quando una funzione pretende come
DettagliIl linguaggio Java: aggiunte in Java 1.5
.. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:
DettagliProgrammazione a blocchi. Algobuild Prof. Sergio Roselli
Programmazione a blocchi Algobuild Prof. Sergio Roselli Blocchi base Inizio programma I Fine programma F Input IN A Output Esecuzione OUT A A = 5 + 1 L interprete Algobuild Algobuildpermette di trascrivere
DettagliAPPUNTI LEZIONI PROGRAMMAZIONE II A CURA DELLA PROF.SSA EMANUELA FACHINI. Ricorsione.
Introduzione. APPUNTI LEZIONI PROGRAMMAZIONE II A CURA DELLA PROF.SSA EMANUELA FACHINI Ricorsione. In questi appunti cercheremo di esaminare piu da vicino la ricorsione, come tecnica di programmazione,
DettagliLa 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
DettagliLinguaggio C Informatica Grafica
Linguaggio C Informatica Grafica Corsi di Informatica Grafica Prof. Manuel Roveri Dipartimento di Elettronica e Informazione roveri@elet.polimi.it Linguaggio C Breve storia Struttura di un programma Variabili
Dettagli