Fortran中的任意顺序循环

时间:2014-06-05 13:02:18

标签: loops fortran nested-loops

下面的程序使用三重嵌套循环生成一个范围内的所有升序三元组。你会如何为任意订单做这件事?我不想为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

1 个答案:

答案 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