11.07.2014 Views

Fondamenti di Informatica - Università degli studi di Parma

Fondamenti di Informatica - Università degli studi di Parma

Fondamenti di Informatica - Università degli studi di Parma

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!