Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.

Slides:



Advertisements
Presentazioni simili
Macchine di Turing e ricorsività generale
Advertisements

Sottoprogrammi: funzioni e procedure
Uso avanzato di C.
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
Procedure e funzioni ricorsive
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Alberi binari di ricerca
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Iterazione enumerativa (for)
Alberi binari Definizione della struttura dati: struct tree { };
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
CORSO DI PROGRAMMAZIONE II
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Progetto di algoritmi: metodologia "Divide et Impera"
APPUNTI SUL LINGUAGGIO C
LdL - LP1 - ver. 6 - lez aa Linguaggi di programmazione I La ricorsione Prof. Luigi Di Lascio Lezione 10.
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Algoritmi su Tipi Semplici
Introduzione alla Ricorsione
Le liste dinamiche La ricorsione
La Programmazione Ricorsiva
DEFINIZIONE DI NUOVE FUNZIONI & STRATEGIE DI COMPOSIZIONE La capacità di definire nuove funzioni permette: di definire nuove operazioni di introdurre variabili.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Calcolo del Massimo Comun Divisore
Radix-Sort(A,d) // A[i] = cd...c2c1
Algoritmi e Strutture Dati
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
void binario(int n); …………………
Massimo Comun Divisore
L' insieme Q+ L’insieme Q+ è un ampliamento dell’insieme N, chiuso rispetto alla divisione, in esso possiamo affermare che: UNA FRAZIONE IRRIDUCIBILE.
Radice quadrata di un numero
1 Parte 5 Fondamenti di Programmazione. 2 Programmazione Concetti base: dati istruzioni Dati: variabili tipi Istruzioni: istruzioni base strutture di.
Ricorsione Strumento potente per definizioni matematiche
Corso di Programmazione in Java – Esercizio n° 001
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.
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Complessità di un algoritmo
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Le funzioni Rassegna degli argomenti trattati LS Tron 14/15 Prof. Carla Fanchin.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
La ricorsione.
Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.
Allievi Elettrici - AA Le funzioni ricorsive in C
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
C++:Strutture di Controllo
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
Divide et Impera Parte 11 - Risoluzione di problemi per divisione in sottoproblemi “bilanciati” Corso A: Prof. Stefano Berardi
Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
DEFINIZIONE. I multipli di un numero sono costituiti dall’insieme dei prodotti ottenuti moltiplicando quel numero per la successione dei numeri naturali.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Numeri Primi, Numeri composti, MCD, mcm
Transcript della presentazione:

Ricorsione Procedure e funzioni ricorsive

Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La ricorsione è un mezzo molto potente per le definizioni e le dimostrazioni matematiche (induzione) Si usano algoritmi ricorsivi quando il problema da risolvere presenta caratteristiche proprie di ricorsività (può essere risolto in termini di uno o più problemi analoghi ma di dimensioni inferiori)

Sullo schermo del computer compare un computer sul cui schermo compare un computer sul cui schermo compare un computer e così via

Definizioni ricorsive Definizione dei numeri naturali: 1) 1 è un numero naturale 2) il successore di un numero naturale è un numero naturale Definizione di fattoriale: 1)0! = 1 2)se N > 0 allora N! = N* (N-1)! Calcolo del MCD tra due numeri A e B (A>B) 1)dividere A per B 2)se il resto R è zero allora MCD(A,B)=B altrimenti MCD(A,B)=MCD(B,R)

Terminazione Il potere della ricorsività consiste nella possibilità di definire un insieme anche infinito di oggetti con un numero finito di comandi Il problema principale quando si usano algoritmi ricorsivi è quello di garantire una terminazione (caso terminale, condizione di fine, condizione iniziale) Non è sufficiente inserire una condizione di terminazione, ma è necessario che le chiamate ricorsive siano tali da determinare il verificarsi di tale condizione in un numero finito di passi

Procedure e funzioni ricorsive Un sottoprogramma ricorsivo è una procedura (o funzione) all'interno della quale è presente una chiamata a se stessa o ad altro sottoprogramma che la richiama La ricorsione è diretta se la chiamata è interna al sottoprogramma altrimenti si dice indiretta.

Funzione ricorsiva per il MCD int MCD(int A,B) { int R; //calcolo del resto della divisione tra A e B R= A % B; //calcolo di MCD If (R==0) return B; else return(MCD(B,R)); } Condizione di terminazione

Stampa invertita delle cifre di un numero void Inverti_Num(int N) { while (N / 10 != 0) do { cout<< (N % 10); N=N / 10; } } {M A I N} … Inverti_Num(425); void Inverti_Num(int N) { cout<< (N % 10); If ((N / 10) != 0) Inverti_Num(N / 10); } {M A I N} … Inverti_Num(425); Procedura ricorsivaProcedura iterativa

Istanziazione Ogni nuova chiamata di un sottoprogramma ricorsivo determina una nuova istanza dell'ambiente locale (distinto da quello precedente che comunque resta attivo). Ad ogni chiamata si alloca nuova memoria e questo può determinare problemi di spazio. I vari ambienti vengono salvati in una struttura di tipo LIFO (Stack o Pila) in modo che alla terminazione di una determinata istanza venga riattivata quella immediatamente precedente e così via

Diagramma di traccia Inverti N =749 cout<< (N % 10); N / 10 !=0 è True N =74 cout<< (N % 10); N / 10 !=0 è True N =7 cout<< (N % 10); N / 10 !=0 è False void Inverti_Num(int N) { cout<< (N % 10); If ((N / 10) != 0) Inverti(N / 10); } {M A I N} … Inverti_Num(749);

Fattoriale int Fatt(int N { If N==0 return 1 else return (N*Fatt(N-1)); }; {M A I N} … cout<<(Digita un valore : ); cin>>N; cout<<(Il fattoriale di,N, è,Fatt(N)); …

N =3 (N = =0) False Fatt = N Fatt(N -1)=3 Fatt(2) Fatt = 3 2 = 6 N =2 (N = =0) False Fatt = N Fatt(N -1) = 2 Fatt(1) Fatt = 2 1 = 2 N = 1 (N = = 0) False Fatt = N Fatt(N -1) = 1 Fatt(0) Fatt = 1 1 = 1 N = 0 (N = = 0) True Fatt = 1 Fattoriale di 3