// garbage collecting is really handy here... void snowflake(Vertex u, int N, double L) { if (N == 0) { if (A == null || AA.DistanceTo(u) < AA.DistanceTo(A)) { A = u; } if (B == null || BB.DistanceTo(u) < BB.DistanceTo(B)) { B = u; } return; } for (int i = 0; i < 6; i++) { if (i == 3 && u.parent != null) { continue; } Vertex v = new Vertex(); v.heading = u.heading + Math.PI * i / 3.0; v.x = u.x + L * Math.Cos(v.heading); v.y = u.y + L * Math.Sin(v.heading); v.parent = u; snowflake(v, N - 1, L / K); } }