是否可以使用fortran函数作为自己的参数?

时间:2014-04-09 18:03:41

标签: python fortran

我想找到一个本质上递归的特定函数的值。例如,考虑定义如下的函数:

 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函数不允许自己成为自己的参数。有没有办法解决这个问题?

提前致谢。

1 个答案:

答案 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,请告诉我们。我现在无法测试它,我不知道它是如何工作的。