25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.15 Procedure ricorsive 281<br />

CALL hanoi(n-1,starting,free)<br />

PRINT 100, "Muovi il disco", n, "dal piolo", &<br />

starting, "al piolo", goal<br />

CALL hanoi(n-1,free,goal)<br />

END IF<br />

100 FORMAT(1X,A15,I3,1X,A10,1X,I1,1X,A9,1X,I1)<br />

END SUBROUTINE hanoi<br />

END PROGRAM test_hanoi<br />

Si riporta, per completezza, un esempio di run del precedente programma:<br />

C:\MYPROG>hanoi<br />

Con quanti dischi vuoi giocare? 4<br />

Soluzione:<br />

Muovi il disco 1 dal piolo 1 al piolo 2<br />

Muovi il disco 2 dal piolo 1 al piolo 3<br />

Muovi il disco 1 dal piolo 2 al piolo 3<br />

Muovi il disco 3 dal piolo 1 al piolo 2<br />

Muovi il disco 1 dal piolo 3 al piolo 1<br />

Muovi il disco 2 dal piolo 3 al piolo 2<br />

Muovi il disco 1 dal piolo 1 al piolo 2<br />

Muovi il disco 4 dal piolo 1 al piolo 3<br />

Muovi il disco 1 dal piolo 2 al piolo 3<br />

Muovi il disco 2 dal piolo 2 al piolo 1<br />

Muovi il disco 1 dal piolo 3 al piolo 1<br />

Muovi il disco 3 dal piolo 2 al piolo 3<br />

Muovi il disco 1 dal piolo 1 al piolo 2<br />

Muovi il disco 2 dal piolo 1 al piolo 3<br />

Muovi il disco 1 dal piolo 2 al piolo 3<br />

Come ultimo esempio si vuole riportare un programma che implementa un algoritmo, quello<br />

di ordinamento a doppio indice (anche detto quick sort), che si presta ad essere espresso<br />

in forma ricorsiva in maniera molto naturale. L’algoritmo in esame, che si caratterizza<br />

per una eccezionale efficienza da un punto di vista di complessità di calcolo, può così essere<br />

schematizzato:<br />

1. Si preleva un elemento dalla lista a, e lo si pone nella sua posizione corretta ossia si<br />

spostano alla sua sinistra tutti i valori minori di questo elemento e si spostano alla sua<br />

destra tutti gli elementi maggiori.<br />

2. Si perviene così a due sottoliste (quella di sinistra e quella di destra) ancora intrinsecamente<br />

disordinate ma comunque tali che ciascun loro elemento non dovrà lasciare, nelle<br />

successive operazioni di ordinamento, la propria sottolista.<br />

3. Applicando ricorsivamente questo procedimento alle due sottoliste si perviene ad una<br />

successione di liste che, alla fine, degenerano ciascuna in un solo elemento. A questo<br />

punto la lista di partenza è completamente ordinata.

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

Saved successfully!

Ooh no, something went wrong!