递归求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
找到原因了,主程序有一个叫n的变量,子程序中也有一个,所以会警告但不报错,只要把变量的名字改一下就好了 没问题呀,主程序里面有 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]