我正在做一个需要在 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
对于这个程序,输出是:
NaN
1
如果我更改打印语句的顺序(第 30 和 31 行),输出将是:
1
-19.000000
输出应该是(对于原始打印语句顺序):
120
-19
我从 Wikipedia Fortran 95 语言功能页面中获取了阶乘函数。
- 编译器:带有 Cygwin 的 gfortran 4.5.3
- IDE:Netbeans 7.0.1
- 平台:Windows 7