递归可以把一个复杂问题转化为一个与原问题相似的规模较小的问题,通过自己调用自己,找到最终解决这个问题的条件,达到判断条件时返回。
通过分形树理解递归
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