次のコードでは、変数a
とa1
が 2 の場合、再帰サブルーチンで長さ 4 (maxdev=4) のネストされた 2 つの do ループを作成します。
count
ネストのレベルを変数(count1
サブルーチン内) で制御しようとしています。ただし、サブルーチンが単独で呼び出されると、値count1
は最初の呼び出し内で保持されません。入れ子のレベルを反映するために、外側のループcount1
が 1 の値を保持し、2 番目のループが 2 の値を保持するようにします。count1
これが達成されるように、プログラムを指定する方法がわからない。代わりに、内側のループを作成する呼び出しが外側のループに戻ると、外側のループの値count1
が変更され、内側のループでインクリメントされた値が反映されます。
program fragarrays
implicit none
integer::gridres,maxdev,a,count
integer, allocatable:: x(:)
open(unit=1,file='D:/output11.txt',status='unknown')
gridres=2
maxdev=gridres*gridres
do a = 1,2
count=0
allocate(x(a))
call assigncell(a,maxdev,count,x)
deallocate(x)
end do
contains
recursive subroutine assigncell(a1,maxdev1,count1,x1)
integer:: a1,maxdev1,b
integer::count1
integer,dimension(a1):: x1
count1=count1+1
do b=1,maxdev1
x1(count1)=b
write (1,*)count1,x1(count1),b,a1
if(count1.lt.a1)then
call assigncell (a1,maxdev1,count1,x1)
end if
end do
end subroutine assigncell
end program fragarrays