我收到此错误并且无法调试我的代码,你们可以帮助我吗?目标是获得每个m个点的N个数字的组合。
program combinations
implicit none
integer, parameter :: m_max = 3
integer, parameter :: n_max = 5
integer, dimension (m_max) :: comb
character (*), parameter :: fmt='(i0' // repeat(', 1x, i0', m_max - 1) // ')'
call gen (1)
contains
recursive subroutine gen (m)
implicit NONE
integer, intent (in) :: m
integer :: n
if (m.gt.m_max) then
write (*,fmt) comb
else
do n = 1, n_max
if ((m.eq.1).OR.(n.gt.comb(m-1))) then
comb(m)= n
call gen (m + 1)
end if
end do
end if
end subroutine gen
end program combinations
我得到的错误是这样的:数组Comb的下标#1的值为0,小于1的下限。
我不明白这个消息,所以请帮帮我
答案 0 :(得分:3)
来自编译器的运行时消息很明确:当数组comb(0)
的下限为1(和上限comb
)时,您正在尝试访问元素m_max
当gen
取值为1时,对m
的第一次调用会发生此访问。您可以访问n.gt.comb(m-1)
。这很糟糕。
您似乎认为在第一次测试m.eq.1
时可能会出现一些短路现象。如果这是真的,您可能会认为,那么逻辑条件已经成立并且n.gt.comb(m-1)
未经过测试。事实并非如此。