中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

递归子程序result关键字

问题描述

编译时出现如下报错。

test1.F90:13:27:
 
   13 |       func = sqrt(2.0 *func(n-1))
      |                           1
Error: ‘func’ at (1) is the name of a recursive function and so refers to the result variable. Use an explicit RESULT variable for direct recursion (12.5.2.1)

问题原因

规范规定recursive function递归调用的函数需要用result关键字表示函数返回值,用函数名作为返回值会报错(ifort支持函数名做为返回值的写法)。

recursive Function func(n)
  real :: func
  integer :: n
  if (n>0) then
      func = sqrt(2.0 *func(n-1))
  else
      func = sqrt(2.0)
  end if
  print *, 'test ', n, func
end

处理步骤

添加result关键字描述函数返回值。

recursive Function func(n) result(r)

real :: r
  integer :: n
  if (n>0) then
      r = sqrt(2.0 *func(n-1))
  else
      r = sqrt(2.0)
  end if
  print *, 'test ', n, r
end