递归程序

在 Fortran 函数和子例程中,如果要直接或间接地再次调用自身,则需要显式声明为递归。因此,Fibonacci 系列的递归实现可能如下所示:

recursive function fibonacci(term) result(fibo)
  integer, intent(in) :: term
  integer::fibo

  if (term <= 1) then
    fibo = 1
  else
    fibo = fibonacci(term-1) + fibonacci(term-2)
  end if
  
end function fibonacci

另一个例子是允许计算阶乘:

recursive function factorial(n)  result(f)
  integer::f
  integer, intent(in) :: n
  
  if(n == 0) then
    f = 1
  else
    f = n * f(n-1)
  end if
end function factorial

对于直接递归引用自身的函数,其定义必须使用 result 后缀。函数既不可能是 recursive 也不是 elemental