A recursive method consist in explore solutions which depends on solutions of the same instance of the solution. For example, a function take 3 points to build a triangle. After the triangle is built, the mid points of the triangle edges are calculated and the function is called again. this time, the new 3 points are passed as parameters. This process define an infinite number of instances, triangles inside another triangle, inside another triangle. Therefore a stop condition must be applied.
As opposed, iterations consist in repeat a certain number of tasks until a solutions is reached. Recursion is a broadly concept applied in a variety of fields: Linguistic, Logic, Art, Humor, Philosophy, Computer Science, etc.
FINITE SUBDIVISION RULE
In mathematics, a finite subdivision rule is a recursive method to divide a polygon into smaller pieces, usually confused with fractals because, both exhibits self-similarity at different scales. finite subdivision rules also has different applications in design, biology, computer science, 3d modelling, etc.
Similar as the triangle example, A subdivision rule starts with a polygon tile and turns it into a new tile by subdividing the polygon into smaller polygons. It's called finite subdivision because there are only finite number of ways to subdivide every polygon at each step.
The code below, is the start point I used to develop the following polygon subdivisions images.
Option Explicit 'Script written by Carlos de la Barrera' Call Main() Sub Main() Dim pt1, pt2, pt3, trip pt1 = Rhino.GetPoint("sel fisrt point") If IsNull (pt1) Then Exit Sub pt2 = Rhino.GetPoint("sel second point") If IsNull (pt2) Then Exit Sub pt3 = Rhino.GetPoint("sel third point") If IsNull (pt3) Then Exit Sub trip = Rhino.AddPolyline(Array(pt1, pt2, pt3, pt1)) Call myFractal(trip, pt1, pt2, pt3) End Sub Function myFractal(trip, Opt1, Opt2, Opt3) Dim pt1, pt2, pt3 pt1 = myMidFunction(Opt1, Opt2) pt2 = myMidFunction(Opt2, Opt3) pt3 = myMidFunction(Opt3, Opt1) trip = Rhino.AddPolyline(Array(pt1, pt2, pt3, pt1)) If Rhino.Distance(pt1, pt2) > 0.01 Then Call myFractal(trip, pt1, pt2, pt3) Else Exit Function End If End Function Function myMidFunction(P1, P2) Dim MidP MidP = Array((P1(0) + P2(0)) / 2, (P1(1) + P2(1)) / 2, (P1(2) + P2(2)) / 2) myMidFunction = MidP End Function
The third one is the Sierpinski triangle
Experiments, with random decisions
Experiments, using other triangle properties for the subdivision
Experiments transforming hexagons to triangles and vice versa
3D recursive subdivisions