#数据结构与算法 python版 之 谢尔宾斯基三角形 , 树叉
1.为了向阿西莫夫的"机器人三定律"直径,递归算法也总结出"三定律"
1递归算法必须有一个基本结束条件(最小规模问题的直接解决)
2递归算法必须能改变状态向基本结束条件演进(减小问题规模)
3递归算法必须调用自身 解决减小了规模的相同问题
##递归可视化 python的海龟作图系统 turtle module
python内置,随时可用以logo语言的创意为基础
意向为模拟乌龟在沙滩上爬行而留下的祖居
爬行:forwodl(n) backward (n)
转向 left(a) ;right(a)
抬笔 放笔 penup() pendown()
笔属性 pensize(s);pencolor© //sc参数
###作图开始
import turtle
t= turtle.Turtle()
t.forward(100) #指挥海龟作图
###作图结束
turtle.done()
import turtle
t= turtle.Turtle()
t.pencolor('red')
t.pensize(3)
for i in range(5):
t.forwad(100)
t.right(144)
t.hideturtle()
turtle.done()
##谢尔宾斯基三角形
import turtle
t=turtle.Turtle()
def xie(degree,points):
colormap=['blue','red','green','white','yellow','orange']
drawTriagngle(points,colormap[degree])
if degree>0:
xie(degree-1,
{
'left':points['left'],
'top':getMid(points['left'],points['top']),
'right':getMid(points['left'],points['right'])
}
)
xie(degree - 1,
{
'left':getMid(points['left'], points['top']),
'top': points['top'],
'right': getMid(points['top'], points['right'])
})
xie(degree - 1,
{
'left': getMid(points['left'], points['right']),
'top': getMid(points['top'], points['right']),
'right': points['right']
}
)
def drawTriagngle(points, color):
t.fillcolor(color)
t.penup()
t.goto(points['top'])
t.pendown()
t.begin_fill()
t.goto(points['left'])
t.goto(points['right'])
t.goto(points['top'])
t.end_fill()
def getMid(p1,p2):
return ((p1[0]+p2[0])/2,(p1[1]+p2[1])/2)
t=turtle.Turtle()
points ={'left':(-200,-100),
'top':(0,200),
'right':(200,-100)}
xie(5,points)
turtle.done()