excavator 发表于 2023-8-5 10:32:25

递归求n!阶乘

请问为什么一直提示“Variable "n" masks variable in parent scope[行:9,列:18]”?当然不建议在返回单个数字的时候用interface,这段代码只是练习
program recursive_test
    implicit none

    INTEGER :: n
    interface
      RECURSIVE INTEGER function fact(n) result(ans)
      LOGICAL :: count
      INTEGER :: n
      end function fact
    end interface
    write (*, "('N = ', I3)")
    read (*, *) n
    write (*, "(I3, '! = ', I8)") n, fact(n)

    stop
end program recursive_test

RECURSIVE INTEGER function fact(n) result(ans)
    implicit none

    INTEGER :: n
    LOGICAL :: count

    if (n < 0) then
      ans = -999
      count = .false.
      return
    else if (n <= 1) then
      ans = 1
      count = .true.
      return
    end if

    ans = n*fact(n - 1)

    return
end function fact


excavator 发表于 2023-8-5 16:54:32

找到原因了,主程序有一个叫n的变量,子程序中也有一个,所以会警告但不报错,只要把变量的名字改一下就好了

fcode 发表于 2023-8-6 17:00:56

没问题呀,主程序里面有 n,不影响子程序里面有 n 的。你的代码我这里运行毫无问题。

尽管你的代码没有问题,但有一些语句没有必要。帮你注释出来。

program recursive_test
    implicit none
    INTEGER :: n
    interface
      RECURSIVE INTEGER function fact(n)! result(ans)
      !LOGICAL :: count 不必要
      INTEGER :: n
      end function fact
    end interface
    write (*, "('N = ', I3)")
    read (*, *) n
    write (*, "(I3, '! = ', I8)") n, fact(n)
    ! stop 不必要
end program recursive_test

RECURSIVE INTEGER function fact(n) result(ans)
    implicit none
    INTEGER :: n
    !LOGICAL :: count
    if (n < 0) then
      ans = -999
      !count = .false.
      !return
    else if (n <= 1) then
      ans = 1
      !count = .true.
      !return
    else
      ans = n*fact(n - 1)      
    end if
    !return
end function fact
页: [1]
查看完整版本: 递归求n!阶乘