Мне нужно спроектировать и реализовать подпрограмму на Фортране, чтобы определить размер кластеров на квадратной решетке, и казалось чрезвычайно удобным рекурсивно кодировать подпрограмму. Однако всякий раз, когда размер моей решетки выходит за пределы определенного значения (около 200 на сторону), подпрограмма постоянно переходит в состояние ошибки. Вот моя процедура обнаружения кластеров:
RECURSIVE SUBROUTINE growCluster(lattice, adj, idx, area)
INTEGER, INTENT(INOUT) :: lattice(:), area
INTEGER, INTENT(IN) :: adj(:,:), idx
lattice(idx) = -1
area = area + 1
IF (lattice(adj(1,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(1,idx),area)
IF (lattice(adj(2,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(2,idx),area)
IF (lattice(adj(3,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(3,idx),area)
IF (lattice(adj(4,idx)).GT.0) &
CALL growCluster(lattice,adj,adj(4,idx),area)
END SUBROUTINE growCluster
где adj (1, n) представляет северного соседа сайта n, adj (2, n) представляет запад и т. Д. Что может привести к ошибочному поведению сегфо? Является ли кластер "слишком большим" для больших размеров решетки?