La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

INFORMATICA Algoritmi fondamentali
1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Preincremento e PostIncremento in C++
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Iterazione A. Ferrari.
Programmazione concorrente
Procedure e funzioni ricorsive
Generazione di numeri casuali in Dev C++
Sviluppo di programmi strutturati
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Introduzione al linguaggio C
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Tail recursion: esempio
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
APPUNTI SUL LINGUAGGIO C
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Esercizi su alberi binari
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Esercizi C su array e matrici
Le liste dinamiche La ricorsione
La Programmazione Ricorsiva
Le funzioni.
Calcolo del Massimo Comun Divisore
Equazione di secondo grado.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Programmazione di Calcolatori
void binario(int n); …………………
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1.
Massimo Comun Divisore
Unità Didattica 3 Linguaggio C
Programmazione di Calcolatori
Radice quadrata di un numero
Esercizi su File.
Esercizi Liste.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Soluzioni e commenti esercizi 1 e 2
Tail recursion: esempio
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Alberi binari Definizione della struttura dati: struct tree { };
Complessità di un algoritmo
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
Anno accademico Le istruzioni di controllo in C.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

La ricorsione Simulazione

Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n);

La funzione ricorsiva fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt);

Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); visualizzazione prompt

Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); lettura dato = 4

Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); test validità

Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); chiama fatt(4)

Istanza n.1 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Fatt (n=4)

Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); test non verificato

Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(3)

Istanza n.2 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=3)

Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test non verificato

Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(2)

Istanza n.3 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=2)

Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test non verificato

Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(1)

Istanza n.4 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=1)

Istanza n.4 della funzione fatt int fatt( int n) (n=1) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test non verificato

Istanza n.4 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Chiama fatt(0)

Istanza n.5 della funzione fatt int fatt( int n) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); fatt(n=0)

Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Test verificato

Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 1

Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 1

Istanza n.5 della funzione fatt int fatt( int n) (n=0) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Con lesecuzione del return, listanza attuale scompare

Istanza n.4 della funzione fatt int fatt( int n) (n=1) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 1 1 = 1

Istanza n.4 della funzione fatt int fatt( int n) (n=1) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 1

Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 2 1 = 2

Istanza n.3 della funzione fatt int fatt( int n) (n=2) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 2

Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 3 2 = 6

Istanza n.2 della funzione fatt int fatt( int n) (n=3) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 6

Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); n_fatt = 4 6 = 24

Istanza n.1 della funzione fatt int fatt( int n) (n=4) int n_fatt; if(n == 0) n_fatt = 1; else n_fatt = n fatt(n-1); return(n_fatt); Viene restituito n_fatt = 24

Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); valore = 24

Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); stampa: 4! = 24

Esecuzione del Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n: ); scanf(%d, &dato); if(n < MAX_N) valore = fatt(dato); printf(%d! = %d\n, n, valore); else printf(Errore: valore troppo grande\n); Fine programma