usrbinenv python3 turtleexamplesuite tdemotree py displays a breadthfirsttree in contrast to the classical logo tree drawing programs which use a depthfirstalgorithm uses 1 a treegenerator where the drawing is quasi the sideeffect whereas the generator always yields none 2 turtlecloning at each branching point the current pen is cloned so in the end there are 1024 turtles plist is list of pens l is length of branch a is half of the angle between 2 branches f is factor by which branch is shortened from level to level if l 3 lst for p in plist p forwardl q p clone p lefta q righta lst appendp lst appendq for x in treelst lf a f yield none def maketree p turtle p setundobuffernone p hideturtle p speed0 p getscreen tracer30 0 p left90 p penup p forward210 p pendown t treep 200 65 0 6375 for x in t pass def main aclock maketree bclock return done 2f sec ba if name main msg main printmsg mainloop usr bin env python3 turtle example suite tdemo_tree py displays a breadth first tree in contrast to the classical logo tree drawing programs which use a depth first algorithm uses 1 a tree generator where the drawing is quasi the side effect whereas the generator always yields none 2 turtle cloning at each branching point the current pen is cloned so in the end there are 1024 turtles plist is list of pens l is length of branch a is half of the angle between 2 branches f is factor by which branch is shortened from level to level
from turtle import Turtle, mainloop
from time import perf_counter as clock

def tree(plist, l, a, f):
    
    if l > 3:
        lst = []
        for p in plist:
            p.forward(l)
            q = p.clone()
            p.left(a)
            q.right(a)
            lst.append(p)
            lst.append(q)
        for x in tree(lst, l*f, a, f):
            yield None

def maketree():
    p = Turtle()
    p.setundobuffer(None)
    p.hideturtle()
    p.speed(0)
    p.getscreen().tracer(30,0)
    p.left(90)
    p.penup()
    p.forward(-210)
    p.pendown()
    t = tree([p], 200, 65, 0.6375)
    for x in t:
        pass

def main():
    a=clock()
    maketree()
    b=clock()
    return "done: %.2f sec." % (b-a)

if __name__ == "__main__":
    msg = main()
    print(msg)
    mainloop()