This is Metapost code:

[mpost]
z0=(210/2mm, 297/2mm);
numeric radius; radius=x0-2.54cm/2;
numeric np; np=5;
numeric depth; depth=1;
numeric startang; startang=90;
numeric ang; ang=360/np;

def sierpthing(expr nang, cen, rad, n) =
 begingroup
 save pentrat, radsm, radto, bgp, smc, mdp;
 numeric pentrat, radsm, radto;
 pentrat=1/(2*(cosd ang)+2); % Ratio of size of small pents to big one.
 radsm=pentrat*rad; % Radius of smaller ones.
 radto=rad-radsm; % Radius to center of smaller ones.

 pair bgp[], smc[], mdp[];
 for i=0 upto np-1:
 bgp[i]=cen+rad*dir(nang+ang*i);
 smc[i]=cen+radto*dir(nang+ang*i);
 endfor
 for i=0 upto np-1:
 % The point of the center pent just anti-clockwise of the others.
 mdp[i]=(bgp[(i) mod np]--bgp[(i+2) mod np]) intersectionpoint
 (bgp[(i+1) mod np]--bgp[(i+4) mod np]);
 endfor
 if n>0:
 fill mdp[0]--mdp[1]--mdp[2]--mdp[3]--mdp[4]--cycle;
 fi
 if (n<depth) and (n>=0):
 fill mdp[2]--(pentrat[bgp[2],bgp[3]])--(pentrat[bgp[3],bgp[2]])--cycle;
 fi
 if n>0:
 sierpthing(nang+4ang, smc[4], radsm, n-1);
 sierpthing(nang, smc[0], radsm, n-1);
 sierpthing(nang+ang, smc[1], radsm, n-1);
 if n=depth:
 sierpthing(nang+2ang, smc[2], radsm, n-1);
 sierpthing(nang+3ang, smc[3], radsm, n-1);
 else:
 sierpthing(nang, smc[2], radsm, n-2);
 sierpthing(nang, smc[3], radsm, n-2);
 fi
 fi
 endgroup
enddef;

sierpthing(startang, z0, radius, depth);

endfig

end
[/mpost]