递归应用之分形树构建Python

2020-11-26 10:27发布

递归应用之分形树构建

分形树,顾名思义,每一支树都是一样的,类似于完全二叉树,子树和母树完全一样。所以可以用递归来实现。

思路:所以画一棵树时,画完主干话分支,因为是一样的,所以画分支的过程和画主干的过程完全一样,其实就是一个缩小版的主干。这样一层层递归,直到达到终止条件。

先简单的思考一棵树,只有两层,即只有两个分支。过程是:先画主干,画完主干,则再画右分支,画完右分支,退回到分叉点,然后再画左分支。

t.forward(branch_len)
# 此时海龟的方向为垂直向上,所以右分支只需向右转20度即可
t.right(20)
t.forward(branch_len - 15)
t.backward(branch_len - 15)
# 此时海龟的方向是右偏20度,而左分支是左偏20度,所以需要左转40度
t.left(40)
t.forward(branch_len - 15)12345678

接下来,再思考一下有三层的树。此时,画完主干,画右分支,那么画完右分支后马上画左分支吗?可以想象,以最短路径的目的简单思考,并且有规律的画,肯定不是这样的,这样会重复走很多个主干。用递归的思想,画完分支后,继续看还能不能继续画分支,能画则继续递归,不能画则退出当前递归,继续运行。

def tree(branch_len):
	# 递归结束条件,当前主干(分支)长度要大于5
    if branch_len > 5:
        t.forward(branch_len)
        t.right(20)
        # 继续递归判断右分支是否还能画分支
        tree(branch_len - 15)
        t.left(40)
        # 左分支是否还能画分支
        tree(branch_len - 15)
        # 本层分支结束,回归原位,退回到上一层的分支点
        t.right(20)
        t.backward(branch_len)12345678910111213

测试代码如下:

t = turtle.Turtle()
t.left(90)
t.penup()
t.backward(100)
t.pendown()
t.pencolor('green')
t.pensize(2)
tree(75)
t.hideturtle()
turtle.done()


作者:qq_42907161

链接:https://blog.csdn.net/qq_42907161/article/details/108193429

来源:CSDN
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。