我无法获取一个必须递归的函数,取一个字符并返回一个整数数组作为结果。
我的示例代码:
program main
implicit none
integer :: i
integer, dimension(3) :: myresult, rec_fun
character(1) :: input
input = 'B'
myresult = rec_fun(input)
do i = 1,3
write(*,*) myresult(i)
end do
end program main
recursive function rec_fun(input) result(a)
implicit none
character(1), intent(in) :: input
integer, dimension(3) :: a
if (input == 'A') then
a(1) = 2
a(2) = 3
a(3) = 4
return
else
a = rec_fun('A') * 2
return
end if
end function rec_fun
函数rec_fun应该接受一个字符并返回一个整数数组。因此,主程序中写循环的输出应为: 4 6 8
工作是什么(整数 - >整数),(字符 - >整数)和(整数维(3) - >整数维(3)),这意味着参数/返回类型不需要等于。但是我需要(字符 - >整数维度(3))。但是以某种方式接受一个字符并返回一个数组是不被接受的,当尝试编译时(gcc编译器带有标志-lgfortran)我得到了
“错误:(1)处的数组索引必须是INTEGER类型,找到CHARACTER”
用(1)指向第8行主程序中第一次使用函数名。 我不知道如何解决这个问题是一种可扩展且不是硬编码的方式,因此我可以用1百万替换3。使用指针等的变通方法也不起作用,因为数组操作将直接应用于返回时的函数输出。有没有人有任何想法?感谢。
编辑:我发现这个问题有所不同,因为它在一个函数中查看了数组返回和递归的问题,而且在他们的解决方案中都没有使用关键字“interface”。
我的解决方案,使用显式界面,如评论中所示:
program main
implicit none
interface
recursive function rec_fun(input) result(a)
character(1), intent(in) :: input
integer, dimension(3) :: a
end function rec_fun
end interface
integer :: i
integer, dimension(3) :: myresult
character(1) :: input
input = 'B'
myresult = rec_fun(input)
do i = 1,3
write(*,*) myresult(i)
end do
end program main
它现在编译并打印正确的结果。但是我不确定这个解决方案的合法性,因为我之前从未使用过fortran接口。