• 递归讲解-分形树(python版:两种书写方法)


    一、递归介绍

    1、定义:函数定义中调用函数自身的方式称为递归。

    2、书写递归的2个关键特征:

    (1)存在一个或多个基例,基例不需要再次递归,它是确定的表达式;

    (2)递归链条,所有递归链条要以一个或多个基例结尾。

    (3)书写方式:

            通过分支语句来书写。

            if   基例条件

                 基例语句块

           else:

                递归链条

    二、分步骤讲解分形树,进而用递归实现

    1、1阶树

    1. import turtle as t
    2. def tree_1(length): #一阶分形树
    3. t.fd(length) #树干
    4. t.left(30)
    5. t.fd(length) #左树枝
    6. t.bk(length)
    7. t.right(60)
    8. t.fd(length)#右树枝
    9. t.bk(length)
    10. t.left(30)
    11. t.bk(length)#回到根部
    12. t.left(90)
    13. tree_1(100)
    14. t.hideturtle()
    15. t.done()

    效果如下:

    2、2阶树

    1. def tree_2(length):#二阶分形树
    2. t.fd(length)
    3. t.left(30)
    4. tree_1(length) #调用一阶树
    5. t.right(60)
    6. tree_1(length)#调用一阶树
    7. t.left(30)
    8. t.bk(length)
    9. t.left(90)
    10. tree_2(100)
    11. t.hideturtle()
    12. t.done()

    效果如下:

    3、3阶树

    1. def tree_3(length):#三阶分形树
    2. t.fd(length)
    3. t.left(30)
    4. tree_2(length)#调用二阶树
    5. t.right(60)
    6. tree_2(length)#调用二阶树
    7. t.left(30)
    8. t.bk(length)
    9. t.left(90)
    10. tree_3(100)
    11. t.hideturtle()
    12. t.done()

     效果如下:

    4、递归书写分形树(第一种方法)

    1. def tree_4(length):#递归第一种方法 以length为基例条件
    2. if length<=0:#基例,当树枝长度<=0时返回
    3. return
    4. else:
    5. t.fd(length)
    6. t.left(30)
    7. tree_4(length-10)#树枝长度每次减10
    8. t.right(60)
    9. tree_4(length-10)#树枝长度每次减10
    10. if length-10<=0:#树枝<=0时画一个粉色圆点
    11. t.color('pink')
    12. t.dot(10)
    13. t.color('brown')
    14. t.left(30)
    15. t.bk(length)
    16. tree_4(100)
    17. t.hideturtle()
    18. t.done()

    效果如下:

    5、 递归书写分形树(第二种方法)

    1. def tree_5(length,n):#递归第二种方法,以n为基例条件
    2. if n<0: #基例,以树的阶数为基例,注意n<0不是n<=0
    3. return
    4. else:
    5. t.fd(length)
    6. t.left(30)
    7. tree_5(length-3,n-1) #树枝和树干的长度可以相同,也可以每次减一个数值,树的阶数每次减1
    8. t.right(60)
    9. tree_5(length-3,n-1)#树枝和树干的长度可以相同,也可以每次减一个数值,树的阶数每次减1
    10. if n<=0:
    11. t.color('green')
    12. t.dot(20)
    13. t.color('brown')
    14. t.left(30)
    15. t.bk(length)
    16. t.speed(0)
    17. t.left(90)
    18. t.penup()
    19. t.goto(0,-300)
    20. t.pendown()
    21. tree_5(100,7)
    22. t.hideturtle()
    23. t.done()

    6、递归书写分形树(第三种方法)

    1. import turtle as t
    2. def draw_circle():#画粉色圆点
    3. t.pencolor('pink')
    4. t.dot(10)
    5. t.pencolor('brown')
    6. def tree_n1(length,n):
    7. if n==1: #基例,其实就是tree_1
    8. t.fd(length)
    9. t.left(30)
    10. t.fd(length-10)
    11. draw_circle()
    12. t.bk(length-10)
    13. t.right(60)
    14. t.fd(length-10)
    15. draw_circle()
    16. t.bk(length-10)
    17. t.left(30)
    18. t.bk(length)
    19. else:
    20. t.fd(length)
    21. t.left(30)
    22. tree_n1(length-10,n-1)#左枝
    23. t.right(60)
    24. tree_n1(length-10,n-1)#右枝
    25. t.left(30)
    26. t.bk(length)
    27. t.left(90)
    28. tree_n1(100,4)
    29. # tree_n(100)
    30. t.done()

    效果跟以上两种方法一样,这种写法更容易理解一些。

  • 相关阅读:
    三、防火墙-源NAT
    linux 清理垃圾文件
    Google guava之Multimap简介说明
    23. python 条件判断嵌套
    spring复习02,xml配置管理bean
    有谁会易位构词c++代码啊,可以直接运行的或者需要添加完词典库就可以直接运行的
    Encoder-decoder 与Decoder-only 模型之间的使用区别
    大数据Spark教程从入门到精通第四篇:Spark快速上手
    Java基于微信小程序的青少年健康心理科普平台
    M语言-数据类型
  • 原文地址:https://blog.csdn.net/zhaipupu/article/details/127997509