PROGRAM PROG_REC_SUB_SUM3
IMPLICIT NONE
INTEGER :: N, Z
CHARACTER :: Flag
DO
PRINT *, "Enter a positive integer (N), greater than or equal to 3:"
READ *, N
CALL REC_SUB_SUM3(N,Z)
PRINT *, "Sum= ", Z, " by a recursive SUBROUTINE"
PRINT *, 'Continue? If not, press "n" or "N"; else press any other key.'
READ *, Flag
IF ((Flag=="n") .OR. (Flag=="N")) THEN
EXIT
END IF
END DO
CONTAINS
RECURSIVE SUBROUTINE REC_SUB_SUM3(N, MySum)
INTEGER, INTENT(IN) :: N
INTEGER, INTENT(OUT) :: MySum
IF (N==3) THEN
MySum=3
ELSE
IF (MOD(N,3)==0) THEN
CALL REC_SUB_SUM3(N-3, MySum)
MySum=N+MySum
ELSE
CALL REC_SUB_SUM3(N-1, MySum)
END IF
END IF
END SUBROUTINE REC_SUB_SUM3
END PROG_REC_SUB_SUM3