PROGRAM TorrediHanoi IMPLICIT NONE INTEGER :: d INTEGER :: Rosso = 1, Verde = 2, Blu = 3 ! DO PRINT*,"Quanti dischi?" READ*,d IF ( d <= 0 ) THEN PRINT*,"Ciao ciao" STOP ENDIF CALL hanoi(d,Rosso,Verde,Blu) END DO ! STOP END PROGRAM TorrediHanoi RECURSIVE SUBROUTINE hanoi(n, Rosso, Verde, Blu) IMPLICIT NONE INTEGER, INTENT (IN) :: n, Rosso, Verde, Blu CHARACTER(6), DIMENSION(3), PARAMETER :: paletto = ["Rosso", "Verde", "Blu"] ! IF (n < 1) THEN RETURN ELSE CALL hanoi(n-1, Rosso, Blu, Verde) PRINT*, paletto(Rosso), ' --> ', paletto(Blu) CALL hanoi(n-1, Verde, Rosso, Blu) END IF ! RETURN END SUBROUTINE hanoi