{$MODE OBJFPC}{$LONGSTRINGS ON}

type
  TMyArray = array [0 .. 4, 0 .. 4] of Integer;

  procedure FillArray(out AArray: TMyArray; AX, AY, AValue, AStep: Integer);
  begin
    if (AX = 5) or (AY = 5) then Exit;

    AArray[AX, AY] := AValue;

    if AValue in [0, 5] then
      AStep *= -1;

    FillArray(AArray, AX + 1, AY, AValue + AStep, AStep);
    FillArray(AArray, AX, AY + 1, AValue + AStep, AStep);
  end;

  procedure PrintArray(const AArray: TMyArray);
  var
    X, Y: Integer;
  begin
    for Y := 0 to 4 do
    begin
      for X := 0 to 4 do
        Write(AArray[X, Y]:3);

      WriteLn();
    end;
  end;

var
  MyArray: TMyArray;
begin
  FillArray(MyArray, 0, 0, 1, 1);
  PrintArray(MyArray);
end.