递归可以把一个巨大问题转化为一个与原问题相似的局限较小的问题,通过本身挪用本身,找到最终办理这个问题的条件,到达判定条件时返回。
通过度形树领略递归
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