递归可视化画分形树

“递归”是一个理解起来简单,原理清晰但是比较难操作的一类方法。
递归函数就是能够自己调用自己的函数,要使用递归,首先要满足其所需要求:
1)必须有一个基本结束条件(否则会陷入死循环)
2)必须调用自身
3)必须能改变状态向基本结束条件演进
下面用递归的方法画一个分形树:
递归可视化画分形树_第1张图片
我们先将问题简化,这个树的基本组成结构是’Y’形状,那么就可以将问题简化为是由多个‘Y’拼接而成的。从而使用递归函数画图。

import turtle
def tree(branch_len):
    if branch_len > 5:
        t.forward(branch_len)  #画树干
        t.right(20)  #向右20°
        tree(branch_len - 15) #递归函数画右侧
        t.left(40)  #向左偏移40°
        tree(branch_len - 15)  #递归调用画左侧
        t.right(20)  #向右偏移20°,此时相当于与树干共线的方向
        t.backward(branch_len) #退回原位置

t = turtle.Turtle()
t.left(90)
t.penup()  
t.backward(300)
t.pendown()
t.pencolor('red')
t.pensize(2)
tree(125)
t.hideturtle()
turtle.done()

下面来分析一下这个函数的执行过程:
就用长度从60开始的函数来看:

tree(60):画树干长为60,向右偏移20°     (1)
    tree(45):画树干长为45,向右偏移20°    (2)
        tree(30):画树干长为30,向右偏移20°    (3)
            tree(15):画树干长为15,向右偏移20°    (4)
                tree(0):递归结束(结束之后要进行的是tree(15)这个函数的下半部分)
            向左偏移40°(此处开始执行tree(15)后半部分)
                tree(0):第二个递归,不满足基本条件,递归结束
            tree(15)向右偏移20°,后退原位置
        向左偏移40°(此处开始执行tree(30)后半部分)
        tree(15):画树干长为15,向右偏移20°    (5)
。。。

上面的括号里面的数对应的是下图标注的数:
递归可视化画分形树_第2张图片

你可能感兴趣的:(python,递归法,可视化)