Using ArrayPad
+ Fold
+ Nest
+ MatrixPlot
ClearAll[padMat]
padMat = Fold[ArrayPad[#, RotateLeft[{{0}, {Length @ #, 0}}, #2 - 1], 1 + Max @ #] &,
#, {1, 2}] &;
Examples:
With[{n = 6}, MatrixPlot[Nest[padMat, {{1}}, n] /. x_Integer :> ColorData[97][x],
ImageSize -> 600, Frame -> False, Mesh -> All]]

Grid @ Partition[#, 3] & @ Table[
MatrixPlot[Nest[padMat, {{1}}, n] /. x_Integer :> ColorData[97][x],
ImageSize -> 300, Frame -> False, Mesh -> All], {n, 0, 5}]

Using Fold
+ ArrayPad
only:
ClearAll[paddedMat]
paddedMat[n_] := Fold[
ArrayPad[#, RotateLeft[{{0}, {Length @ #, 0}}, #2 - 1], 1 + Max @ #] &,
{{1}}, Mod[Range[n], 2, 1]];
Example:
With[{n = 10}, MatrixPlot[paddedMat[n] /. x_Integer :> ColorData[97][x],
ImageSize -> 700, Frame -> False, Mesh -> All]]

We can add labels using Epilog
:
With[{n = 8},
MatrixPlot[paddedMat[n] /. x_Integer :> ColorData[97][x],
Mesh -> All, ImageSize -> 700, Frame -> False,
Epilog -> MapIndexed[Text[Style[2^-Min[#2[[1]], n],
Max[8, 72/Min[#2[[1]], n - 1]]], #] &,
Reverse[{# - 1, 2^(Floor[n/2]) - #2} + 1/2 & @@@
(Reverse @ Mean[Position[paddedMat[n], #]] & /@ Range[1 + n])]]]]
