友情提示:380元/半年,儿童学编程,就上码丁实验室。
Python第十课 绘制五角星3.0
学习目标:
1. 理解并学习使用Python中的递归函数。
教学重难点:
递归函数的使用。
学习内容:
案例2:
使用turtle 库在Python中绘制简单图形:
1.0:绘制五角星。
2.0:加入循环操作绘制重复不同大小的图形。
3.0:利用递归函数绘制2.0的图形。
案例分析:
1. 引入turtle库。
2. 调整笔的位置、大小和颜色。
3. 设置五角星边长的起始长度。
4. 利用递归函数绘制五角星。
程序代码:

代码分析:
1. Python中的递归函数
通过上节课的学习,我们已经可以完成五角星的绘制,而且可以控制五角星的个数,今天我们就介绍一种更简单的方式—递归函数,说起递归函数我们使用一个形象的例子来说明一下:
从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?……
可能这样的故事说一天也说不完,如果我们想用程序实现也十分的复杂,Python中的递归函数则可以完美的解决这个问题,实现自己调用自己,下面就让我们一起来认识一下Python中的递归函数:
递归函数的定义:
如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归函数的特性:
1.能够非常简洁地解决重要问题。
2.每次函数调用时,函数参数会临时存储,相互没有影响。
3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少。
4.达到终止条件时,各函数逐层结束运算,返回计算结果。
5.必须有一个明确的结束条件,否则递归无法正常返回结果。
例如在本程序中:

我们不必再使用上节课中使用到的循环来实现绘制多个五角星,我们只需要在主程序中定义五角星边长的初始尺寸和调用递归函数即可:
size = 50
draw_fig(size)
在递归函数中完成一次五角星的绘制后,将size的大小增加50,之后进行判断,如果size的大小没有达到我们想要的大小则继续调用递归函数进行五角星的绘制,如果已经超过了我们预期的尺寸则退出函数,继续执行主程序中的内容。
递归函数的优点是定义简单,逻辑也十分的清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归函数清晰。
在使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出,造成命名空间占用太多内存的问题,于是Python为了杜绝此类现象,强制的将递归层数控制在了997层。因此,我们在使用递归函数时要注意递归次数。
运行程序
点击右键运行程序,得到结果如下图所示:

课后练习:
尝试利用递归函数绘制不同大小的正方形。