Итеративное создание треугольника Серпинского в системе Mathematica?

Я написал код, который рисует фрактал Серпинского. Это действительно медленно, так как использует рекурсию. Кто-нибудь из вас знает, как я могу написать тот же код без рекурсии, чтобы он был быстрее? Вот мой код:

 midpoint[p1_, p2_] := Mean[{p1, p2}]
 trianglesurface[A_, B_, C_] :=  Graphics[Polygon[{A, B, C}]]
 sierpinski[A_, B_, C_, 0] := trianglesurface[A, B, C]
 sierpinski[A_, B_, C_, n_Integer] :=
 Show[
 sierpinski[A, midpoint[A, B], midpoint[C, A], n - 1],
 sierpinski[B, midpoint[A, B], midpoint[B, C], n - 1],
 sierpinski[C, midpoint[C, A], midpoint[C, B], n - 1]
 ]

edit:

Я написал его с использованием подхода Chaos Game на случай, если кому-то это интересно. Спасибо за отличные ответы! Вот код:

 random[A_, B_, C_] := Module[{a, result},
 a = RandomInteger[2];
 Which[a == 0, result = A,
 a == 1, result = B,
 a == 2, result = C]]

 Chaos[A_List, B_List, C_List, S_List, n_Integer] :=
 Module[{list},
 list = NestList[Mean[{random[A, B, C], #}] &, 
 Mean[{random[A, B, C], S}], n];
 ListPlot[list, Axes -> False, PlotStyle -> PointSize[0.001]]]
10
задан John 31 January 2012 в 11:28
поделиться