! 例題 8-12 「ハノイの塔」の解 [再帰的手続きの定番 ] PROGRAM ex8_12 IMPLICIT NONE INTEGER :: n CHARACTER ( LEN = 1 ) :: a = 'A', b = 'B', c = 'C' WRITE ( *, '( A )', ADVANCE = 'NO' ) '最初の輪の個数は? ' READ *, n CALL hanoi( n, a, b, c ) END PROGRAM ex8_12 ! RECURSIVE SUBROUTINE hanoi( i, x, y, z ) IMPLICIT NONE INTEGER, INTENT ( IN ) :: i INTEGER, SAVE :: count = 0 CHARACTER ( LEN = 1 ), INTENT ( IN ) :: x, y, z IF ( i == 0 ) RETURN CALL hanoi( i - 1, x, z, y ) ! 手順 (1) CALL output CALL hanoi( i - 1, z, y, x ) ! 手順 (3) CONTAINS SUBROUTINE output count = count + 1 PRINT '( 1X, I3, ") 第", I1, "番目の輪を ", A1, " から ", & & A1, " へ移動する" )', count, i, x, y END SUBROUTINE output END SUBROUTINE hanoi