PROGRAM LAB_10
IMPLICIT NONE
INTEGER :: N, Z
CHARACTER :: Flag
DO
PRINT *, "Enter a positive integer N"
READ *, N
PRINT *, "Sum= ", FUN_SUM(N), " by non-recursive FUNCTION"
PRINT *, "Sum= ", REC_FUN_SUM(N), " by recursive FUNCTION"
CALL SUB_SUM(N,Z)
PRINT *, "Sum= ", Z, " by non-recursive SUBROUTINE"
CALL REC_SUB_SUM(N,Z)
PRINT *, "Sum= ", Z, " by recursive SUBROUTINE"
PRINT *, "Continue? If not, press 'n' or 'N'"
READ *, Flag
IF ((Flag=="n") .OR. (Flag=="N")) THEN
EXIT
END IF
END DO
CONTAINS
FUNCTION FUN_SUM(N)
INTEGER, INTENT(IN) :: N
INTEGER :: FUN_SUM, I
FUN_SUM=0
DO I=1, N
IF (MOD(I,3)==0) THEN
FUN_SUM=FUN_SUM+I
END IF
END DO
END FUNCTION FUN_SUM
RECURSIVE FUNCTION REC_FUN_SUM(N) RESULT (MySum)
INTEGER, INTENT(IN) :: N
INTEGER :: MySum
IF (N==3) THEN
MySum=3
ELSE
IF (MOD(N,3)==0) THEN
MySum=N+REC_FUN_SUM(N-3)
ELSE
MySum=REC_FUN_SUM(N-1)
END IF
END IF
END FUNCTION REC_FUN_SUM
SUBROUTINE SUB_SUM(N, MySum)
INTEGER, INTENT(IN) :: N
INTEGER, INTENT(OUT) :: MySum
INTEGER :: I
MySum=0
DO I=1, N
IF (MOD(I,3)==0) THEN
MySum=MySum+I
END IF
END DO
END SUBROUTINE SUB_SUM
RECURSIVE SUBROUTINE REC_SUB_SUM(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_SUM(N-3, MySum)
MySum=N+MySum
ELSE
CALL REC_SUB_SUM(N-1, MySum)
END IF
END IF
END SUBROUTINE REC_SUB_SUM
END PROGRAM LAB_10