下面的程序使用三重嵌套循环生成一个范围内的所有升序三元组。你会如何为任意订单做这件事?我不想为2个,3个,4个整数等单独的代码。
program main
implicit none
integer :: i1,i2,i3,n,ivec(3)
n = 10
do i1=1,n
do i2=i1+1,n
do i3=i2+1,n
ivec = [i1,i2,i3]
print*,"ivec =",ivec
end do
end do
end do
end program main
答案 0 :(得分:2)
递归是一个很酷的Fortran95功能。 maxlevel=2
表示2个嵌套级别。
recursive subroutine innerloop(start, end, mylevel, ivec, maxlevel)
integer, intent(in)::start,end,mylevel,maxlevel
integer, intent(in),dimension(mylevel)::ivec
integer, dimension(mylevel+1)::ipass
integer::i
do i=start+1,end
if (mylevel.eq.maxlevel) then
ipass(1:mylevel)=ivec
ipass(mylevel+1)=i
print*, "ivec =", ipass
else
ipass(1:mylevel)=ivec
ipass(mylevel+1)=i
call innerloop(i,end,mylevel+1,ipass,maxlevel)
end if
end do
end subroutine innerloop
program main
implicit none
integer::n,i
integer,dimension(1)::ivec
integer::maxlevel=2
n=10
do i=1,n
ivec=i
call innerloop(i,n,1,ivec,maxlevel)
end do
end program main