{$MODE OBJFPC}{$LONGSTRINGS ON}

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

  procedure Fill(out AArray: TArray; AX, AY, AValue, AStep: Integer);
  begin
    if 5 in [AX, AY] then Exit;

    AArray[AX, AY] := AValue;

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

    Fill(AArray, AX, AY + 1, AValue + AStep, AStep);

    if AY = 0 then
      Fill(AArray, AX + 1, AY, AValue + AStep, AStep);
  end;

  procedure Show(const AArray: TArray);
  var
    X, Y: Integer;
  begin
    for Y in [0 .. 4] do
    begin
      for X in [0 .. 4] do
        Write(AArray[X, Y]:2);

      WriteLn();
    end;
  end;

var
  MyArray: TArray;
begin
  Fill(MyArray, 0, 0, 1, 1);
  Show(MyArray);
end.
