PROGRAM indirekte_Rekursion
IMPLICIT NONE
INTEGER :: i
LOGICAL :: gerade
WRITE (*,"(A)",ADVANCE="NO") "Geben Sie bitte eine Integerzahl ein: "
READ (*,*) i
IF (gerade(ABS(i))) THEN
WRITE (*,*) i, 'ist eine gerade Zahl'
ELSE
WRITE (*,*) i, 'ist eine ungerade Zahl'
ENDIF
END PROGRAM
RECURSIVE FUNCTION gerade (i) RESULT (ergebnis)
IMPLICIT NONE
INTEGER :: i
LOGICAL :: ergebnis, ungerade
IF (i == 0) THEN
ergebnis = .TRUE.
ELSE
ergebnis = ungerade(i-1)
ENDIF
END FUNCTION gerade
RECURSIVE FUNCTION ungerade (i) RESULT (ergebnis)
IMPLICIT NONE
INTEGER :: i
LOGICAL :: ergebnis, gerade
IF (i == 0) THEN
ergebnis = .FALSE.
ELSE
ergebnis = gerade(i-1)
ENDIF
END FUNCTION ungerade
Mit rekursiven Funktionen ist es möglich, den Source-Code von Programmen oft sehr kurz oder leicht verständlich zu schreiben:
PROGRAM fakultaet IMPLICIT NONE INTEGER :: n .... WRITE (*,*) 'n! = ',faculty(n) CONTAINS RECURSIVE INTEGER FUNCTION faculty (n) RESULT (fac) IMPLICIT NONE INTEGER :: n IF (n <= 1) THEN fac = 1 ! Abbruch der Rekursion bei definiertem ELSE ! Wert (oft bei n=0 oder 1) fac = n*faculty(n-1) ! n! = n*(n-1)! .. Rekursionsformel wird ENDIF ! nahezu 1:1 umgesetzt! END FUNCTION faculty END PROGRAM fakultaet