ESERCIZIO: la Torre di Hanoi

Slides:



Advertisements
Presentazioni simili
1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
Advertisements

Macchine di Turing e ricorsività generale
Uso avanzato di C.
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Analisi della complessità degli algoritmi
Analisi della complessità degli algoritmi
Procedure e funzioni ricorsive
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Effetti combinati con powerpoint
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Metodi numerici per equazioni lineari iperboliche Gabriella Puppo.
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
APPUNTI SUL LINGUAGGIO C
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà
Algoritmi e Strutture Dati
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su code Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori.
Esercizi su alberi binari
Selezione (=scelta) con “if-else”
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Strutture di controllo in C -- Flow Chart --
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Esercizi C su array e matrici
La Programmazione Ricorsiva
Le funzioni.
Modulo 7 – reti informatiche u.d. 3 (syllabus – )
Equazione di secondo grado.
Algoritmi e Strutture Dati
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Massimo Comun Divisore
3 aprile 2002 Avvisi: 1 o Esonero: mercoledi 17 aprile ore 11:30 – 14:00 consulta la pag. WEB alla voce esoneri si raccomanda la puntualita!
Esercizi Liste.
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
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 { };
Ricerca sequenziale in un array di interi
Complessità di un algoritmo
Fine La Torre di Hanoi.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
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.
#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.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
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
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
Suggerimenti [1d5] SE la prima lettera della matrice (in alto a sinistra, matrice[0,0]) è diversa dalla prima lettera della parola (parola[0]) ALLORA siamo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 18 Maggio 2016.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

ESERCIZIO: la Torre di Hanoi Sono date tre torri (sinistra, centrale, e destra) e un certo numero N di dischi forati. I dischi hanno diametro diverso gli uni dagli altri, e inizialmente sono infilati uno sull’altro (dal basso in alto) dal più grande al più piccolo sulla torre di sinistra. Scopo del gioco è portarli tutti sulla torre di destra, rispettando due regole: a) si può muovere un solo disco alla volta; b) un disco grande non può mai stare sopra un disco più piccolo.

ESERCIZIO: la Torre di Hanoi sinistra centrale destra

ESERCIZIO: la Torre di Hanoi Come risolvere il problema? Immaginare la serie di mosse che, in generale, risolve il problema è impensabile Invece, è abbastanza semplice esprimere una soluzione ricorsiva Ipotesi: Siamo capaci di spostare un singolo disco tra due torri a scelta.

ESERCIZIO: la Torre di Hanoi Soluzione ricorsiva Caso banale: un singolo disco si sposta direttamente dalla torre iniziale a quella finale Caso generale: per spostare N dischi dalla torre iniziale a quella finale occorre spostare N-1 dischi dalla torre iniziale a quella intermedia, che funge da appoggio spostare il disco rimanente (il più grande) diretta-mente dalla torre iniziale a quella finale spostare gli N-1 dischi “posteggiati” sulla torre intermedia dalla torre intermedia a quella finale

ESERCIZIO: la Torre di Hanoi 1 sinistra centrale destra

ESERCIZIO: la Torre di Hanoi 2 sinistra centrale destra

ESERCIZIO: la Torre di Hanoi 3 sinistra centrale destra

ESERCIZIO: la Torre di Hanoi sinistra centrale destra

ESERCIZIO: la Torre di Hanoi La soluzione delineata per il caso “N dischi” presuppone di sapere spostare N-1 dischi stesso problema in un caso più semplice di sapere spostare un singolo disco abilità che possediamo per ipotesi.

ESERCIZIO: la Torre di Hanoi Specifica rappresentiamo le tre torri con un intero rappresentiamo ogni mossa tramite la coppia di torri coinvolte (in futuro le scriveremo sull’output) la procedura hanoi ha come parametri il numero di dischi da spostare la torre iniziale la torre finale la torre da usare come appoggio void hanoi(int d, int torreIniziale, int torreFinale, int torreTransito);

ESERCIZIO: la Torre di Hanoi Codifica void hanoi(int d, int iniziale, int finale, int transito){ if (d==1) { /* muovi da iniziale a finale */ } else { hanoi(d-1, iniziale, transito, finale); hanoi(d-1, transito, finale, iniziale); }

ESERCIZIO: la Torre di Hanoi Alcune domande come avremmo fatto senza la ricorsione? è una ricorsione lineare? Alcune proposte costruire un idoneo cliente e provare il programma provare, in un caso semplice, a seguire quello che accade passo per passo in futuro, inserire al posto dei commenti delle istruzioni di stampa a video.

ESERCIZIO: la Torre di Hanoi Codifica void hanoi(int d, int iniziale, int finale, int transito){ if (d==1) { printf("Muovi un disco dalla torre %d " "alla torre %d\n", iniziale, finale); } else { hanoi(d-1, iniziale, transito, finale); hanoi(d-1, transito, finale, iniziale); }