我想找到一个本质上递归的特定函数的值。例如,考虑定义如下的函数:
A(m,n) = n+1 if m=0
= A(m-1,A(m-1,n)) if m is not 0
在python中我可以轻松编写这个函数:
def A(m,n):
if(m==0):
return n+1
else:
return A(m-1,A(m-1,n))
但是我无法在FORTRAN中编写类似的功能。基本原因是FORTRAN函数不允许自己成为自己的参数。有没有办法解决这个问题?
提前致谢。
答案 0 :(得分:0)
如果您的编译器支持fortran 90,那么这应该是您的问题的有效解决方案。
program recursivetest
implicit none
integer A,n,m
n=2
m=2
print*, A(m,n)
end
recursive function A(m,n) result (B)
implicit none
integer n,m,B,C
if (m.ne.0) then
C=A(m-1,n)
B=A(m-1,C)
else
B=n+1
endif
end function
我使用ifort(英特尔fortran composer 2011 sp.1)和gfortran编译了这段代码。英特尔fortran编译器也允许这种递归函数定义:
recursive integer function A(m,n)
或:
integer recursive function A(m,n)
严格的FORTRAN 77标准并不直接支持递归函数,尽管有办法解决这个问题。如果您使用FORTRAN 77,请告诉我们。我现在无法测试它,我不知道它是如何工作的。