Por lo muy poco que entendí, una función recursiva para recorridos en 2D podría ser asi:
Código Delphi
[-]
function Recorrer(x, y:integer);
begin
if (m[x, y] <= 0) or (x > MAXX) or (x < 0) or () then
exit;
Recorrer(x+1,y);
Recorrer(x-1,y);
Recorrer(x,y+1);
Recorrer(x,y-1);
end;