Skip to content

Instantly share code, notes, and snippets.

@cyyeh
Created March 19, 2017 00:33
Show Gist options
  • Select an option

  • Save cyyeh/8e2ddd028599c1542eae366421b24bfd to your computer and use it in GitHub Desktop.

Select an option

Save cyyeh/8e2ddd028599c1542eae366421b24bfd to your computer and use it in GitHub Desktop.
# The Three Laws of Recursion
# 1. A recursive algorithm must have a base case.
# 2. A recursive algorithm must change its state and move toward the base case.
# 3. A recursive algorithm must call itself, recursively.
import turtle
myTurtle = turtle.Turtle()
myWin = turtle.Screen()
# Recursion Visualization
def drawSpiral(myTurtle, lineLen):
if lineLen > 0:
myTurtle.forward(lineLen)
myTurtle.right(90)
drawSpiral(myTurtle, lineLen - 5)
def drawTriangle(points, color, myTurtle):
myTurtle.fillcolor(color)
myTurtle.up()
myTurtle.goto(points[0][0], points[0][1])
myTurtle.down()
myTurtle.begin_fill()
myTurtle.goto(points[1][0], points[1][1])
myTurtle.goto(points[2][0], points[2][1])
myTurtle.goto(points[0][0], points[0][1])
myTurtle.end_fill()
def getMid(p1, p2):
return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)
def sierpinski(points, degree, myTurtle):
colormap = ['blue', 'red', 'green', 'white', 'yellow', 'violet', 'orange']
drawTriangle(points, colormap[degree], myTurtle)
if degree > 0:
sierpinski(
[points[0], getMid(points[0], points[1]), getMid(points[0], points[2])],
degree - 1,
myTurtle)
sierpinski(
[points[1], getMid(points[0], points[1]), getMid(points[1], points[2])],
degree - 1,
myTurtle)
sierpinski(
[points[2], getMid(points[2], points[1]), getMid(points[0], points[2])],
degree - 1,
myTurtle)
def main():
# Recursion Visualization
#drawSpiral(myTurtle, 100)
myPoints = [[-100, -50], [0, 100], [100, -50]]
sierpinski(myPoints, 3, myTurtle)
myWin.exitonclick()
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment