Fortran递归函数不会返回数组

时间:2016-10-16 21:30:48

标签: arrays recursion fortran typing fortran95

我无法获取一个必须递归的函数,取一个字符并返回一个整数数组作为结果。

我的示例代码:

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接口。

0 个答案:

没有答案