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 283<br />

RECURSIVE SUBROUTINE quick_sort(a)<br />

IMPLICIT NONE<br />

INTEGER, DIMENSION(:), INTENT(inout) :: a<br />

END SUBROUTINE quick_sort<br />

END INTERFACE<br />

PRINT "(’Lista di partenza:’,/,(I2,1X),/)", a<br />

CALL quick_sort(a)<br />

PRINT "(’Lista ordinata:’,/,(I2,1X))", a<br />

END PROGRAM prova_quick_sort<br />

L’output del programmino di test fornisce questo risultato:<br />

Lista di partenza:<br />

11 6 2 3 13 0 24 -2 9 4<br />

Lista ordinata:<br />

-2 0 2 3 4 6 9 11 13 24<br />

a riprova della bontà della routine.<br />

In tutti gli esempi sviluppati in questo paragrafo una procedura ricorsiva era tale perché<br />

invocava direttamente sé stessa (si parla in tal caso di ricorsione diretta). Tuttavia, una procedura<br />

può essere invocata anche per ricorsione indiretta, cioè può chiamare sé stessa attraverso<br />

l’invocazione di un’altra procedura che la richiami. Per illustrare questo concetto può essere<br />

utile riferirsi ad un esempio concreto. Si supponga si voler eseguire l’integrazione di una funzione<br />

bidimensionale f(x, y) su di un dominio rettangolare avendo, però, a disposizione soltanto<br />

una procedura di integrazione monodimensionale del tipo seguente:<br />

RECURSIVE FUNCTION integrate(f,bounds)<br />

! Scopo: Integrare f da bounds(1) a bounds(2)<br />

IMPLICIT NONE<br />

REAL :: integrate<br />

INTERFACE<br />

FUNCTION f(x)<br />

REAL :: f<br />

REAL, INTENT(IN) :: x<br />

END FUNCTION f<br />

END INTERFACE<br />

REAL, DIMENSION(2),INTENT(IN) :: bounds<br />

...<br />

END FUNCTION integrate<br />

Ebbene, in questo caso si potrebbe scrivere una funzione di modulo che riceva il valore di x<br />

come argomento ed il valore di y dal modulo stesso per host association:<br />

MODULE func

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

Saved successfully!

Ooh no, something went wrong!