上节中我们已经知道有些问题,如果用递归解决变得非常容易。但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么。这一节我们引入几个例子,用递归的方法画几个有趣的图形,通过观察图形的生成,也许能帮助你洞察递归的过程,从而学会递归的方法。
我们要用的工具是python的图形模块turtle,这个模块伴随python的全部版本而且很容易使用,语法也简单。你可以创建一个turtle(乌龟),让它向前,向后,左转,右转等,它的尾巴能抬起或落下,如果落下,当它运动的时候就画出一条轨迹线。为了增加艺术感,可以修改线条的宽度和墨水的颜色
这里有一个例子来说明turtle的基本功能。这段代码用turtle递归地画一段螺旋线。首先引入模块,然后创建一个turtle对象,并新建一个窗口对象作为画布。下面定义drawSpiral函数。递归函数的基点,是每次运动的距离降到不大于0。向基点运动的方式,是每次画线之后,右转90度,然后再次画线,不过这次的距离就减少。在代码的最后会看到调用函数myWin.exitonclick(),这是一个小方法,作用是turtle对象进入等待模式,如果在窗口里点击,即清理并退出运行。
importturtle
myTurtle=turtle.Turtle()
myWin=turtle.Screen()
defdrawSpiral(myTurtle,lineLen):
iflineLen>0:
myTurtle.forward(lineLen)
myTurtle.right(90)
draw