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