当前位置:   article > 正文

递归讲解-分形树(python版:三种书写方法)_python递归函数画树

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()

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/514846
推荐阅读
相关标签
  

闽ICP备14008679号