# Recursive Tree example

• ``````# define a tree function
def tree(h, levels):
"""This function is recursive: it calls itself."""
line((0, 0), (0, h))  # draw a branch
if levels <= 1:
return  # we've drawn all levels, stop
# branch into two random angles
for angle in [random() * 30, random() * -30]:
# use "with savedState()" to keep the transformations local
with savedState():
# move the origin to the tip of the branch
translate(0, h)
rotate(angle)  # wibble wobble
scale(0.65 + 0.25 * random())  # next branch will be smaller
tree(h, levels - 1) # draw another tree at the tip of the branch

# set the canvas size
size(600, 600)
# move the origin to the bottom middle of the canvas,
# this is where the base of the tree will be
translate(width() / 2, 30)

# set some paint properties
fill(None)
stroke(0)
strokeWidth(10)
lineCap("round")

# draw a tree!
tree(100, 10)  # be careful with higher level values, it may take forever to complete!
``````

• Fun fact: this script will also be able to draw a beach ball if to tell it to draw branches 25 levels deep!

• @roel But if you hit command-period frantically enough, it will still terminate!

• This is 20 levels deep. It took a while