python-递归函数-分型树

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# @Time    : 2019/4/29 8:42
# @Author  : rao
# @File    : big_tree.py
# @Software: PyCharm
# @desc    : 分型树


import turtle


def main():
    distance = 100
    angle = 20
    step = 25

    turtle.left(90)
    # 将起始点下移150
    turtle.penup()
    turtle.backward(200)
    turtle.pendown()
    # 画笔颜色
    turtle.pencolor('grey')

    draw(distance, angle, step)
    turtle.exitonclick()


def draw(distance, angle, step):
    if distance > 0:
        # 右侧
        setColor(distance, step)
        turtle.forward(distance)
        turtle.right(angle)
        draw(distance - step, angle, step)

        # 左侧
        setColor(distance, step)
        turtle.left(angle * 2)
        draw(distance - step, angle, step)

        # 返回之前的树枝
        setColor(distance, step)
        turtle.right(angle)
        turtle.backward(distance)


def setColor(distance, step):
    if distance - step <= 0:
        # 最后一个树枝设为绿色
        turtle.pencolor('green')
    else:
        turtle.pencolor('grey')


if __name__ == '__main__':
    main()



----------------------------------------------------------

绘制过程是先把右侧都绘制完,再绘制左侧,然后再返回。

我们来分析draw这个函数

def draw(distance, angle, step):
    if distance > 0:
        # 右侧
        setColor(distance, step)
        turtle.forward(distance)
        turtle.right(angle)
        draw(distance - step, angle, step) # 1

        # 左侧
        setColor(distance, step)
        turtle.left(angle * 2)
        draw(distance - step, angle, step) # 2

        # 返回之前的树枝
        setColor(distance, step)           # 3
        turtle.right(angle)
        turtle.backward(distance)

原始参数 distance=100, step=25
把代码分为三个部分,标记为1,2,3
当distance > 0 时,都是进入 #1 里面去了,层次为3,此时最右侧的边全部画完了,
现在还处在第3层,于是....
一定要有层的概念,先从外圈进到最里圈,然后从最里圈退回到最外圈的过程。

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/92371363