Recursion 递归函数中的运行时检查失败

Recursion 递归函数中的运行时检查失败,recursion,fortran,runtime,intel-fortran,Recursion,Fortran,Runtime,Intel Fortran,当我使用运行时检查编译程序时,会出现以下错误(我不知道为什么): 代码是: program test implicit none real(8) :: x x=my_sum(lambda_i,0,200) print*,x contains function lambda_i(n) result(i) real(8) :: i integer,intent(in) :: n i=dble(n) end functio

当我使用运行时检查编译程序时,会出现以下错误(我不知道为什么):

代码是:

program test

   implicit none
   real(8) :: x

   x=my_sum(lambda_i,0,200)
   print*,x

contains

   function lambda_i(n) result(i)
      real(8) :: i
      integer,intent(in) :: n
      i=dble(n)
   end function

   recursive function my_sum(f,i,n) result(s)
      implicit none
      real(8) :: s
      integer, intent(in) :: i,n
      interface
         function f(n)
         implicit none
         real(8) :: f
         integer,intent(in) :: n
         end function
      end interface

      if ( n .ge. 0 ) s=f(n)+my_sum(f,i,n-1)
   end function

end program

有人有主意吗?没有检查,程序运行正常,除非达到递归限制。

我认为问题在于

if ( n .ge. 0 ) s=f(n)+my_sum(f,i,n-1)
一旦你到达
n.lt。0
,返回值
s
未定义,函数返回未定义的变量(正如
ifort
所抱怨的那样)。因为这是递归的最后一步,所有其他结果都依赖于此,所以总结果是未定义的

这可以通过使用

if ( n .ge. 0 ) then 
  s=f(n)+my_sum(f,i,n-1)
else
  s=0._8
endif

我想问题是

if ( n .ge. 0 ) s=f(n)+my_sum(f,i,n-1)
一旦你到达
n.lt。0
,返回值
s
未定义,函数返回未定义的变量(正如
ifort
所抱怨的那样)。因为这是递归的最后一步,所有其他结果都依赖于此,所以总结果是未定义的

这可以通过使用

if ( n .ge. 0 ) then 
  s=f(n)+my_sum(f,i,n-1)
else
  s=0._8
endif

我的iPort生成值20100,不会崩溃(Windows上的版本14)。Gfortran给出了相同的值,Abosft 2014无法编译(因为它需要lambda_i声明的外部函数,即使它是一个内部函数)。如果我“外部化”lambda_I,我仍然得到20100。我的ifort生成值20100,不会崩溃(Windows上的版本14)。Gfortran给出了相同的值,Abosft 2014无法编译(因为它需要lambda_i声明的外部函数,即使它是一个内部函数)。如果我“外部化”lambda_I,我仍然得到20100。当然,你是对的,但有趣的是,你在三个编译器中得到相同的值。这也是在建议的else子句中设置s=0时得到的值。也就是说,它们似乎都初始化为零。当然,您是对的,但有趣的是,您在三个编译器中得到相同的值。这也是在建议的else子句中设置s=0时得到的值。也就是说,它们似乎都初始化为零。