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