Sto lavorando a un progetto che deve implementare alcuni metodi numerici in FORTRAN. Per questo, ho bisogno di scrivere alcune funzioni ricorsive. Ecco il mio codice.Funzioni FORTRAN
!
! File: main.F95
!
RECURSIVE FUNCTION integrate(n) RESULT(rv)
IMPLICIT NONE
DOUBLE PRECISION :: rv
INTEGER, INTENT(IN) :: n
DOUBLE PRECISION, PARAMETER :: minusone = -1.0
IF (n == 1) THEN
rv = 10 !exp(minusone)
RETURN
ELSE
rv = 1 - (n * integrate(n - 1))
RETURN
END IF
END FUNCTION integrate
RECURSIVE FUNCTION factorial(n) RESULT(res)
INTEGER res, n
IF (n .EQ. 0) THEN
res = 1
ELSE
res = n * factorial(n - 1)
END IF
END
PROGRAM main
DOUBLE PRECISION :: rv1
PRINT *, factorial(5)
PRINT *, integrate(2)
!READ *, rv1
END PROGRAM main
Per questo programma l'uscita è:
NaN
1
Se cambio l'ordine delle istruzioni di stampa (linea 30 & 31), l'uscita sarà:
1
-19.000000
uscita dovrebbe essere (per l'ordine di estratto conto originale):
120
-19
Ho preso la funzione fattoriale dalla pagina Wikipedia Fortran 95 language features. Sono nuovo in FORTRAN, non so cosa c'è di sbagliato nel mio codice. Per favore aiutami ragazzi.
- Compiler: gfortran 4.5.3 con Cygwin
- IDE: Netbeans 7.0.1
- Piattaforma: Windows 7
Grazie in anticipo.
Molto buona domanda, mostrando una funzione di funzione ricorsiva e attenzione ai dettagli. GRAZIE. –