Created
March 19, 2017 00:33
-
-
Save cyyeh/8e2ddd028599c1542eae366421b24bfd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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