目录
一、图示
前面的递归算法展现了其简单而强大的一面,但还是难有个直观的概念,下面通过递归作图来展现递归调用的视觉影响力。
1、python的海龟作图系统turtle module
python内置,随时可用,以LOGO语言的创意为基础
其意象是模拟海龟在沙滩上爬行而留下的足迹
操作:
- 爬行:forward(n), backward(n)
- 转向:left(a), right(a)
- 抬笔放笔:penup(a), pendown()
- 笔属性:pensize(n), pencolor(c)
示例一:
import turtle
# 实例化对象
t = turtle.Turtle()
# 指挥海龟作图,向前画100个像素
t.forward(100)
# 作图结束
tturtle.done()
示例二:
import turtle
t = turtle.Turtle()
for i in range(4):
t.forward(100)
t.right(90)
turtle.done()
示例三:
import turtle
t = turtle.Turtle()
t.pencolor('red')
t.pensize(3)
for i in range(5):
t.forward(100)
t,right(144)
t.hideturtle()
turtle.done()
示例四:
import turtle
t = turtle.Turtle()
def drawSpiral(t, lineLen):
if lineLen> 0:
t.forward(lineLen)
t.right(90)
drawSpiral(t, lineLen-5)
drawSpiral(t, 100)
turtle.done()
二、自相似递归图形
分型Fractal,是1975年由Mandelbrot开创的新学科,一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似的)是整体缩小后的形状,即具有自相似的性质。
自然界中能够找到众多具有分形性质的物体:海岸线、山脉、闪电、雪花、树
自然现象中所具备的分形特性,使得计算机可以通过分形算法生成非常逼真的自然场景。
分形是在不同尺度上都具有相似性的事物:部分与整体相似。
三、分形树
这样,我们可以把树分为三部分:树干、左边的小树、右边的小树,分解后,正好符合递归的定义:对自身的调用
代码:
import turtle
# t = turtle.Turtle()
def tree(branch_len):
if branch_len > 5: # 树干不能画太短,作为 结束条件
t.forward(branch_len) # 画树干
t.right(20) # 右倾斜20度
tree(branch_len - 15) # 递归调用,画出右边的小树
t.left(40)
tree(branch_len - 15)
t.right(20)
t.backward(branch_len)
t = turtle.Turtle()
t.left(90) # 笔的初始状态是水平向右的
t.penup() # 抬笔
t.backward(100) # 只会海龟作图
t.pendown() # 放笔
t.pencolor('green') # 绿色
t.pensize(2) # 2
tree(75) # 树干长度为75
t.hideturtle()
turtle.done()