手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Python Turtle画分形树理解递归

[日期:2020-04-13] 来源:Linux公社  作者:MoLC [字体: ]

递归思想

递归可以把一个复杂问题转化为一个与原问题相似的规模较小的问题,通过自己调用自己,找到最终解决这个问题的条件,达到判断条件时返回。

通过分形树理解递归

Python中的 turtle画图很方便,画分形树的思想也可以用到二叉树的遍历中,我们先来看这样一颗分形树

我们可以发现树的分支都是一样的,具有相同的结构

先考虑简单的最底层的两个分支,我们可以让turtle一开始向上走一段初始距离

def draw_tree(size):
    if size > SIZE_TREE:  # 如果size在范围内,那么可以画树
        # 右边

        turtle.forward(size)     # 先向前走size
        turtle.right(20)         # 右转20°
        draw_tree(size / 1.5)    # 再继续右转 长度减半 走不动时往左边转40°
        # 左边
        turtle.left(40)         # 左转40°
        draw_tree(size / 1.5)   # 画左边的树 长度减半 走不动时 右转20回到原来角度

        # 回到之前的树枝
        turtle.right(20)
        turtle.backward(size) # 退回去画的是原来的长度

按步骤是这样走的

我们在主函数中可以设置turtle的速度,让它走慢点,方便我们看轨迹:

可以更改最后树枝的颜色

"""
    作者:MO
    功能:绘制分形树
    版本:1.0
    日期:2019/3/05
"""
import turtle

SIZE_TREE = 10

def draw_tree(size):
    if size > SIZE_TREE:
        # 右边

        turtle.forward(size)
        turtle.right(20)
        draw_tree(size / 1.5)
        # 左边
        turtle.left(40)
        draw_tree(size / 1.5)

        # 回到之前的树枝
        turtle.right(20)
        # 给最后的树枝画绿色
        if size / 2 <= SIZE_TREE:
            turtle.color('green')
        else:
            turtle.color('brown')
        turtle.backward(size)

def main():
    turtle.speed(1)
    turtle.hideturtle()
    turtle.penup()
    # 方向向上
    turtle.left(90)
    turtle.backward(100)
    turtle.showturtle()
    # 画笔隐形
    # 画笔有效
    turtle.pendown()
    turtle.pensize(2)
    turtle.color('brown')
    # 给出根的长度
    draw_tree(50)

if __name__ == '__main__':
    main()
turtle.done()

更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2020-04/162886.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款