Fondamenti di Informatica - Università degli studi di Parma
Fondamenti di Informatica - Università degli studi di Parma
Fondamenti di Informatica - Università degli studi di Parma
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Ricorsione infinita<br />
• Non tutti i meto<strong>di</strong> ricorsivi realizzano algoritmi<br />
q se manca il caso base, il metodo ricorsivo continua ad<br />
invocare se stesso all’infinito<br />
q se il problema non viene semplificato ad ogni<br />
invocazione ricorsiva , il metodo ricorsivo continua ad<br />
invocare se stesso all’infinito<br />
• Dato che la lista dei meto<strong>di</strong> “in attesa” si allunga<br />
indefinitamente, l’ambiente runtime esaurisce la<br />
memoria <strong>di</strong>sponibile per tenere traccia <strong>di</strong> questa<br />
lista, ed il programma termina con un errore<br />
Progetto: Torri <strong>di</strong> Hanoi<br />
FI - Algoritmi e Programmazione 49<br />
Torri <strong>di</strong> Hanoi: regole<br />
Torri <strong>di</strong> Hanoi: regole<br />
• Il rompicapo è costituito da tre pile <strong>di</strong> <strong>di</strong>schi (“torri”)<br />
allineate<br />
q all’inizio tutti i <strong>di</strong>schi si trovano sulla pila <strong>di</strong> sinistra<br />
q alla fine tutti i <strong>di</strong>schi si devono trovare sulla pila <strong>di</strong> destra<br />
• I <strong>di</strong>schi sono tutti <strong>di</strong> <strong>di</strong>mensioni <strong>di</strong>verse e quando si<br />
trovano su una pila devono rispettare la seguente<br />
regola<br />
q nessun <strong>di</strong>sco può avere sopra <strong>di</strong> sé <strong>di</strong>schi più gran<strong>di</strong><br />
Situazione iniziale<br />
Situazione finale<br />
FI - Algoritmi e Programmazione 51<br />
FI - Algoritmi e Programmazione 52<br />
Torri <strong>di</strong> Hanoi: regole<br />
Algoritmo <strong>di</strong> soluzione<br />
• Per risolvere il rompicapo bisogna spostare un<br />
<strong>di</strong>sco alla volta<br />
q un <strong>di</strong>sco può essere rimosso dalla cima della torre<br />
ed inserito in cima ad un’altra torre<br />
• non può essere “parcheggiato” all’esterno…<br />
q in ogni momento deve essere rispettata la regola<br />
vista in precedenza<br />
• nessun <strong>di</strong>sco può avere sopra <strong>di</strong> sé <strong>di</strong>schi<br />
più gran<strong>di</strong><br />
• Per il rompicapo delle Torri <strong>di</strong> Hanoi è noto un<br />
algoritmo <strong>di</strong> soluzione ricorsivo<br />
• Il problema generale consiste nello spostare n <strong>di</strong>schi<br />
da una torre ad un’altra, usando la terza torre come<br />
deposito temporaneo<br />
• Per spostare n <strong>di</strong>schi da una torre all’altra si<br />
suppone <strong>di</strong> saper spostare n-1 <strong>di</strong>schi da una torre<br />
all’altra, come sempre si fa nella ricorsione<br />
• Per descrivere l’algoritmo identifichiamo le torri con i<br />
numeri interi 1, 2 e 3<br />
FI - Algoritmi e Programmazione 53<br />
FI - Algoritmi e Programmazione 54