第3单元 函数的递归 Gefzw.indd 27 2023/8/14 10:21:17 跟我学Python二级教学辅导 3.1 知识点定位 青少年编程能力“Python 二级”核心知识点3 :递归及算法。 3.2 能力要求 掌握并熟练使用简单的函数递归,具备利用递归处理简单问题的能力。 3.3 建议教学时长 本单元建议2 课时。 3.4 教学目标 1. 知识目标 本单元以函数递归为主,通过大自然场景联系实际案例,让学生掌握递归 与函数递归及简单的递归实现方法,为Python 的后续学习打好坚实的基础。 Gefzw.indd 28 2023/8/14 10:21:18 第3单元 函数的递归 2. 能力目标 通过对Python 函数递归的学习,掌握计算机解决困难问题的方法,锻炼 学习者发现问题、解决问题的能力,培养学习者化繁为简的能力。 3. 素养目标 引入斐波那契数列、斐波那契数列螺旋线及数学问题等相关内容,增加趣 味性,增进学习者对自然界的了解;通过学习自然界的递归问题,用自然科学 解析自然界现象,促进学生养成学以致用的良好习惯。 3.5 知识结构 本单元知识结构如图3-1 所示。 图3-1 函数的递归知识结构 3.6 补充知识点 1. 神秘的斐波那契数列 斐波那契数列在大自然中普遍存在,如植物的花瓣数量、花草分蘖的枝丫、 密集的种子排列……例如,如图3-2 所示的松塔种子、鹦鹉螺结构等也满足斐 Gefzw.indd 29 2023/8/14 10:21:19 跟我学Python二级教学辅导 波那契数列排列的规律。据估计,植物中大约有90% 的叶片排列方式或花瓣 数列涉及斐波那契数列。大家感受到这串神秘数字的厉害之处了吗? 斐波那契数列的规律很简单,但就是这么简单的一个数列,却蕴藏着无穷 的秘密。 如果计算这个数列的前一项与后一项的比值,就会发现,随着取得数越来 越大,其比值也会越来越趋近于0.618 033 988…没错,这就是黄金分割率, 让无数科学家、数学家、艺术家为之着迷的数字,所以斐波那契数列又被称为 黄金分割数列。 图3-2 满足斐波那契数列排列规律的例子 视频资料:“斐波那契数列.mp4” 2. 科赫雪花 所谓科赫雪花,也就是分形几何图形,如图3-3 所示。 分形几何是一种迭代的几何图形,广泛存在于自然界中。 (1)科赫曲线的原理如图3-4 所示。 Gefzw.indd 30 2023/8/14 10:21:19 第3单元 函数的递归 图3-3 科赫雪花 图3-4 科赫曲线的原理 原理总结: ① n 阶科赫曲线怎么画出来?先旋转0o,画1/3 长的n–1 阶科赫曲线, 左转60o,画1/3 长的n–1 阶科赫曲线,左转–120o,画1/3 长的n–1 阶科赫曲 线,左转60o,画1/3 长的n–1 阶科赫曲线。 ②科赫曲线的边界是当n 等于0,画一条直线。 根据分析完成程序如下: from turtle import * def keh(n,size): if n==0: fd(size) else: angles=[0,60,-120,60] for angle in [0,60,-120,60]: left(angle) keh(n-1,size/3) keh(3,300) Gefzw.indd 31 2023/8/14 10:21:23 跟我学Python二级教学辅导 hideturtle() done() (2)将科赫曲线围成一个倒等边三角形,得到如图3-5 所示的科赫雪花。 from turtle import * def keh(n,size): if n==0: fd(size) else: angles=[0,60,-120,60] for angle in [0,60,-120,60]: left(angle) keh(n-1,size/3) speed(0) for i in range(3): keh(3,300) right(120) hideturtle() done() 3.7 教学组织安排 教学环节教学过程建议课时 知识导入 通过中国传统故事,了解故事中讲故事,从而了解程序递归 的实际应用场景 1课时知识拓展播放视频,了解递归的相关概念,引起学生的学习兴趣 递归的概念 通过提问、讨论、测试、动手操作等互动及实践掌握递归的 概念 递归的简单实现采用代码演示操作熟练掌握简单的递归实现方法 1课时 单元总结以提问方式总结本次课所学内容,布置课后作业 图3-5 科赫雪花 Gefzw.indd 32 2023/8/14 10:21:24 第3单元 函数的递归 3.8 教学实施参考 1. 讨论式知识导入 通过图3-6 提问,引出从前有座山的故事……故事里不断提到同样的故事。 引导学生查找自然界中的一个结构嵌套在另一个结构中,使同学们意识到递归 的强大。 图3-6 递归方式讲故事 2. 播放视频资料:“斐波那契数列.mp4” 科普计算机编程中的斐波那契数列与大自然的关系,提高学生的学习兴趣。 3. 知识点一:什么是递归 (1)通过帮助小萌的提问使学生理解递归、代码封装的概念。 (2)讲解汉诺塔问题,需要移动五千多年,用递归实现起来却只有十几行 代码,说明递归的优势。 (3)通过讲解例3-1 中求1+2+…+n 的和问题,编程实现过程。 (4)运行出错,提出递归边界问题。 (5)提出递归的两个关键特征。 (6)以问答的方式完成学生用书上的“想一想”中的问题3-1,理解递归 边界即递归链。 Gefzw.indd 33 2023/8/14 10:21:24 跟我学Python二级教学辅导 (7)以问答的方式完成学生用书上的“想一想”中的问题3-2,理解递归 的简洁。 (8)以测试的方式完成“练一练”中的问题3-3,了解学生关于递归概念 的掌握情况。 4. 知识点二:简单的递归实现 (1)通过例3-2 用递归解决的问题:兔子问题,引入斐波那契数列及其代码 实现。 (2)斐波那契数列用在兔子问题上,引出自然界的斐波那契数列,引出 例3-3 斐波那契数列的图形和黄金螺旋线。 (3)分析斐波那契曲线的算法,完成斐波那契数列的图形和螺旋线程序。 (4)以问答的方式,完成学生用书上的“想一想”中的问题3-4,加深学 生对斐波那契数列的图形和螺旋线的程序理解。 (5)以测试的方式完成“练一练”中的问题3-5,测试学生关于递归程序 的掌握情况。 5. 单元总结 小结本次课的内容,布置课后作业。 3.9 拓展练习 (1)使用turtle 库和递归绘制如图3-7 所示的二叉树。 参考代码如下: from turtle import * def tree(branch_len): if branch_len>5: fd(branch_len) right(20) Gefzw.indd 34 2023/8/14 10:21:24 第3单元 函数的递归 tree(branch_len-15) left(40) tree(branch_len-15) right(20) fd(-branch_len) left(90) pencolor('green') speed(0) hideturtle() penup() goto(0,-100) pendown() tree(95) done() (2)使用递归完成输入数据的逆序,并判断该数据是不是回文数据,例如, 如图3-8 所示的文字“人人为我我为人人”正着看反着看都一样,还有数字 12321 等。 图3-7 二叉树图3-8 人人为我我为人人 程序代码如下。 def reverse(s): if s=="": return s else: return reverse(s[1:])+s[0] s = input("输入要判断回文数的数据:") if s == reverse(s): Gefzw.indd 35 2023/8/14 10:21:25 跟我学Python二级教学辅导 print(s,"是回文数据") else: print(s,"不是回文数据") 运行结果1 : 输入要判断回文数的数据:人人为我我为人人 人人为我我为人人是回文数据 运行结果2 : 输入要判断回文数的数据:我为人人 我为人人不是回文数据 3.10 问题解答 【问题3-1】递归函数如果没有边界条件,会内存溢出报错。 【问题3-2】递归函数的代码简单,不复杂。 【问题3-3】选A。递归函数必须有边界条件,递归代码简单,不包含循 环结构。 【问题3-4】将for i in range(1,n+1) 改为for i in range(n) 不行。如果改了, i 的值将从0 开始,而斐波那契数列从第一项开始,不存在第0 项。会出错。 【问题3-5】选C。阶乘用递归实现else 部分n 的阶乘return n 乘以(n–1) 的阶乘,(n–1)! 用函数jc(n–1)。 3.11 第3单元习题答案 1. A 2. C 3. A 4. D 5. C 6. C 7. B 8. C 9. A Gefzw.indd 36 2023/8/14 10:21:25 第3单元 函数的递归 10. C 11. 参考代码如下。 def mu2(n): if n in [1,2]: return n else: return mu2(n-1)*mu2(n-2) print(mu2(6)) 12. 参考代码如下。 def apple(m): n=2 if m == 0: return 2 else: return (apple(m-1)+1)*2 print(apple(3)) 13. 参考代码如下。 def add2(n): if n in [1,2,3,4]: return n else: return add2(n-2)+add2(n-4) print(add2(8)) 本单元资源下载可扫描下方二维码。 课件3 扩展资源3 Gefzw.indd 37 2023/8/14 10:21:26