Unable to understand this recursive turtle python code

前端 未结 2 2024
独厮守ぢ
独厮守ぢ 2020-12-21 21:01

this is my first time asking a question, I hope some of you will find time to answer.

So my goal is to write a python script using the turtle module to code a pytha

相关标签:
2条回答
  • 2020-12-21 21:04

    The drawTree function doesn't keep calling itself forever, so eventually the statements after the recursive call do get executed. When the recursive call at depth == LIMIT returns then control passes back to the previous call, where depth == LIMIT-1.

    Here's a slightly modified version of your code with a couple of print calls thrown in to help trace the execution.

    I've also made a few other minor changes. I simplified the SCALAR calculation: 0.5 * sqrt(2) == sqrt(0.5), and I only put the pen down when the turtle is actually drawing a square. I've also added a turtle.mainloop() call so that the window stays open when the drawing is finished.

    from __future__ import print_function
    import turtle
    
    LIMIT = 3
    SCALAR = 0.5 ** 0.5
    INDENT = ' ' * 4
    
    def drawTree(size, depth, branch):
        print(INDENT * depth, branch, depth, 'start')
    
        drawSquare(size)
    
        if depth + 1 <= LIMIT:
    
            t.left(90)
            t.forward(size)
            t.right(45)
            drawTree(size * SCALAR, depth + 1, 'left ')
    
            t.forward(size * SCALAR)
            t.right(90)
            drawTree(size * SCALAR, depth + 1, 'right')
    
            t.left(90)
            t.backward(size * SCALAR)
            t.left(45)
            t.backward(size)
            t.right(90)
    
        print(INDENT * depth, branch, depth, 'stop')
    
    
    def drawSquare(sideLength):
        t.down()
        for i in range(4):
            t.forward(sideLength)
            t.left(90)
        t.up()
    
    
    t = turtle.Pen()
    t.up() 
    t.goto(-100, -200)
    drawTree(100.0, 0, 'root')
    
    turtle.mainloop()
    

    output

     root 0 start
         left  1 start
             left  2 start
                 left  3 start
                 left  3 stop
                 right 3 start
                 right 3 stop
             left  2 stop
             right 2 start
                 left  3 start
                 left  3 stop
                 right 3 start
                 right 3 stop
             right 2 stop
         left  1 stop
         right 1 start
             left  2 start
                 left  3 start
                 left  3 stop
                 right 3 start
                 right 3 stop
             left  2 stop
             right 2 start
                 left  3 start
                 left  3 stop
                 right 3 start
                 right 3 stop
             right 2 stop
         right 1 stop
     root 0 stop
    
    0 讨论(0)
  • 2020-12-21 21:23

    For example, "depth" is 10 and program called drawTree(size * SCALAR, 10 + 1) in first paragraph. "depth" becomes 11, IF is false and program returns back to drawTree, where "depth" is 10. And then program executes next line, first line in second paragraph.

    In exactly the same way, program called drawTree() in second paragraph, while "depth" not reaches LIMIT, then returns back and go to first line of third paragraph.

    0 讨论(0)
提交回复
热议问题