第四单元 计算与问题解决
4.3 非数值计算
分治是最常用的算法设计思想,查找是算法中最常见的操作,递归是算法在实现时的常用手段。 本节我们将围绕项目“生活中的算法”展开学习,尝试用计算机的视角去解决实际问题。本项目主要包含“猜数字”和“玩转‘汉诺塔’游戏”两个任务。任务一主要介绍分治中最经典的二分思想;任务二借助汉诺塔游戏重在介绍递归思想及算法实现。
1. 运用合适的算法形成解决问题的方案;
2. 了解算法设计中的分治思想,并运用二分查找解决实际问题; 3. 体验递归的方法,并结合具体问题开展编程实践。
教学重点: 理解二分思想、递归思想,运用二分算法解决实际问题。 教学难点: 理解递归算法。
教师准备:打开微机,投影机,课件。 学生准备:结合课本提前预习。
教学过程 教师活动 运行利用python编写的“猜数字”游导入:猜数字比赛 戏,计算机在1-1000中随机产生一个数,5分钟 试试看你要猜多少次才能猜中。 学生活动 学生参与“猜数字游戏”。 设计意图 玩猜数字游戏,激发学生兴趣。
讲解二分查找思想: 二分查找又叫折半查找,将数列有序排列,采用跳跃式查找数据;以递增数列为例,先以中点位置的元素作为比较对象,如果要找的元素值小于该中点元素,讲授新知: 二分查找 则将待查序列缩小为左半部分,否则为右半部分;每一次比较后都可以将查找区间缩小一半。 学生认真听讲。 了解二分思想。 1. 自然语言如何描述? 2. 程序如何实现? 学生思考。 从自然语言到程序设计语言,降低难度。 尝试用二分法求x3-x2+x-1=0在[-5,5]区间的解。 def f(x): #定义方程 return x**3-x**2+x-1 a=float(input(\请输入解区间的左边练习 界:\b=float(input(\请输入解区间的右边界:\while abs(b-a)>1e-6: x0=(a+b)/2 if f(a)*f(x0)<0: 学生动手操作。 深入理解二分,会运用二分思想解决实际问题
b=x0 if f(b)*f(x0)<0: a=x0 if f(x0)==0: break print(\解为:\x0) input(\运行完毕,请按回车键退出...\汉诺塔游戏 “汉诺塔”游戏源于一个古老的印度传说。如下图所示,在木板上有A、B、C三根杆,A杆上有若干木盘,规定每次移动一个木盘。且小的木盘只能叠在大的木盘上面。请设计算法,用尽可能少的次数把所有的木盘从A杆全部移到C杆上。 学生思考如何完成游戏。 游戏导入,激发兴趣。 讲授新知: 递归 分析游戏过程 从1个盘子开始,到2个盘子,到3个盘子,画出移动过程。 学生动脑思考。 由简到难,逐步分析。 讲解递归思想 递归是重复调用函数自身,递是描述问题,归是解决问题。 直接或间接地调用自身的方法称为递归。可以将递归简单类比为具有自相似性重复的事物。 学生认真听讲。 理解递归思想。
讲解递归函数 讲解递归函数 递归函数是只用函数自身来定义该函数的方法。 老师带领学生一起回顾本课知识。 1. 理解递归思想。 课堂小结 2 分钟 2. 理解递归算法。 3. 理解二分查找思想,运用二分算法解决实际问题。 结合4.2的知识,计算“汉诺塔”游戏移动的次数。 参考答案: def f(n): if n==0: 练习 return 0 else: return 2*f(n-1)+1 x=int(input(\请输入塔的个数:\print(\需要移动\f(x),\次\input(\运行完毕,请按回车键退出...\ 学习递归函数。 再次巩固本堂课的知识,体现教学的完整性。 引导学生思考。
专题4.3 非数值计算(教案)(新教材教科2024版必修1)



