我正在研究需要在FORTRAN中實現少數數值方法的項目。爲此,我需要編寫一些遞歸函數。這是我的代碼。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
我從維基百科Fortran 95 language features頁面中獲得了階乘函數。 我是FORTRAN新手,我不知道我的代碼有什麼問題。請幫助我們。
- 編譯:gfortran 4.5.3使用Cygwin
- IDE:Netbeans的7.0.1
- 平臺:Windows 7的
預先感謝您。
很好的問題,顯示遞歸函數功能和注意細節。謝謝。 – 2014-01-28 22:47:29