The mathematical problem was solved by SebGlav already in the comments and they also helped you a big deal with their answer.
I want to provide a recursive solution using circular nodes and labels (i.e. more nodes).
It uses the ext.pgfkeys-plus library of my tikz-ext package for the /utils/TeX/ifnum={<test>}{<true>}{<false>} key to end the recursion when level zero has been reached. (And if you can't use that the definition of it is in the code below.)
The idea behind this is to anchor the labels (i.e. the circles inside another circle) at the angles 90, 210 and 330 and at their parent node. That way, we only need to evalute the radii and PGF/TikZ figures out the trigonometry of it.
The second picture moves the recursion check inside cic/label so we can use level 0 to do something totally different.
Furthermore another argument is introduced (#3 in cic/@ which replaced cic which is now only a “starter”) which gets carried down and appears as #2 in cic/node'.
It just contains a list of directions in the form of u (90°), l (210°) and r (330°).
Since this is just a ternary number, we could also replace this with some calculations using the level #1 and the digits 0, 1 and 2 to evaluate the values on-the-fly but here I've opted to hardcode these.
Code
\documentclass[tikz]{standalone}
%\usepgfkeyslibrary{ext.pgfkeys-plus}
\makeatletter
\pgfkeys{/utils/TeX/ifnum/.code n args={3}{%
\ifnum#1\relax\expandafter\pgfutil@firstoftwo\else\expandafter\pgfutil@secondoftwo\fi
{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}}}
\makeatother
\begin{document}
\tikz[
cic/node/.style={
shape=circle, inner sep=+0pt, outer sep=+0pt, minimum size={#1}},
cic/.style n args={2}{
cic/node={#2}, cic/level #1/.try,
/utils/TeX/ifnum={#1=0}{}{
/utils/exec=%
\pgfmathsetlengthmacro\rad{#2/(1+2/sqrt(3))}%
\pgfmathtruncatemacro\level{#1-1},
cic/label/.expanded={\level}{\rad}{ 90},
cic/label/.expanded={\level}{\rad}{210},
cic/label/.expanded={\level}{\rad}{330}}},
cic/label/.style n args={3}{
label={[anchor=#3, label position=#3, cic={#1}{#2}]}},
cic/level setter/.style args={#1=#2}{cic/level #1/.style={fill=#2}},
cic/level setter/.list={3=purple, 2=red!50, 1=green!50!black, 0=blue!50},
] \node[cic={3}{2cm}]{};
\tikz[
cic/node/.style={
shape=circle, inner sep=+0pt, outer sep=+0pt, minimum size={#1}},
cic/node'/.style 2 args={% this node contents is just a debug fall back
cic/node={#1}, path only, node contents={#2}, cic/node #2/.try},
cic/.style 2 args={cic/@={#1}{#2}{cic-}},
cic/@/.style n args={3}{
cic/node={#2}, cic/level #1/.try,
/utils/exec=\pgfmathsetlengthmacro\rad{#2/(1+2/sqrt(3))},
cic/label/.expanded={\inteval{#1-1}}{\rad}{ 90}{#3u},
cic/label/.expanded={\inteval{#1-1}}{\rad}{210}{#3l},
cic/label/.expanded={\inteval{#1-1}}{\rad}{330}{#3r}},
cic/label/.style n args={4}{
/utils/TeX/ifnum={#1=0}{
label={[anchor=#3, label position=#3, cic/node'={#2}{#4}]},
}{
label={[anchor=#3, label position=#3, cic/@={#1}{#2}{#4}]}}},
cic/level setter/.style args={#1=#2}{cic/level #1/.style={fill=#2}},
cic/level setter/.list={2=purple, 1=red!50},
cic/node setter/.style args={#1=#2}{
cic/node cic-#1/.style={node contents={#2}}},
cic/node setter/.list={uu=0, ru=1, lu=2, ur=3, rr=4, lr=5, ul=6, rl=7, ll=8}
] \footnotesize\node[cic={2}{2cm}]{};
\end{document}
Output


\pichttps://tikz.dev/tikz-pics and delegate less work here ... that's the wrong approach. – MS-SPO Sep 04 '23 at 14:10\coordinate, or relative usingpositioning. But it's all written in the manuel, i.e. the ... tutorials there. // You may alos look there, how the syntax for polar coordinates look like. Will make your task easier. – MS-SPO Sep 04 '23 at 14:35