内容正文:
4.3 非数值计算
第 4 单元 计算与问题解决
泸科版高中《信息技术》 制作人:陆兴涛(博雅高级中学)
★ 运用合适的算法形成解决问题的方案。
★ 了解算法设计中的分治思想,并运用二分查找解决实际问题。
★ 体验递归算法,并结合具体问题开展编程实践。
学习目标
数据、文字、语言、图形、知识、事物的运动过程及思维过程。
数值计算主要探讨数学问题,非数值计算更多探讨“算法”问题。
本节我们将围绕 “生活中的算法”项目,尝试用“算法的眼睛”看待生活,用“算法的思维”去解决实际问题。
任务一 巧翻字典
次数 翻至页码 下一步决策
第1次
第2次
第3次
第4次
第5次
第6次
请在表4.3.1中记录你的翻页过程,和同学们比一比,看谁翻的次数最少。
500
250
375
312
343
327
目标页码小于500,向左翻页,范围缩小到1-499
目标页码大于250,向右翻页,范围缩小到251-499
目标页码小于375,向左翻页,范围缩小到251-374
目标页码大于312,向右翻页,范围缩小到313-374
目标页码小于343,向左翻页,范围缩小到313-342
目标页码大于327,向右翻页,范围缩小到328-342
※ 活动 统计查字典次数
● 分治策略
分治的设计思想,是将一个难以直接解决的大问题,分割成一些较小的同类问题,各个击破,最终达到解决问题的目的。
● 二分查找
二分查找又叫折半查找,该方法主要将数列有序排列,采用跳跃式的方式查找数据。
例子:在数组(列表)array=[1,5,9,11,23,29,30]中查找29
上机操作1
尝试完善下面的二分查找程序。
x=int(input("请输入要查找的1000以内的整数:"))
step=0 #记录查找次数
flag1=1 #目标区域左边界
flag2=1000 #目标区域右边界
while(flag1<=flag2): #只要区间存在则执行循环
mid=(flag1+flag2)//2 #中间值
step=step+1 #查找次数加1
if mid>x:
flag2=mid-1 #右边界前移
elif mid<x:
flag1=mid+1 #左边界后移
else:
break #恰好找到目标数据,退出循环
print("查找次数为:",step) #输出次数
任务二 玩转 “汉诺塔”游戏
※ 活动 剖析问题,设计游戏策略
木板上有A、B、C三根杆,A杆上有若干木盘,规定每次移动一个木盘,且小的木盘只能叠在大的木盘上面。请设计算法,用尽可能少的次数把所有木盘从A杆全部移到C杆上。
● 递归
直接或间接地调用自身的方法称为递归。可以将递归简单类比为具有自相似性重复的事物。
5!的阶乘,探析分治策略
维度 递归 (Recursion) 迭代 (Iteration)
核心定义 函数在运行过程中调用自身。 利用循环(如 for/while)重复执行代码块,变量的旧值推导新值。
执行结构 呈现为树状结构(深度优先),有“递推”和“回归”两个过程。 呈现为环状结构,从初始状态开始,不断更新状态直到结束。
空间开销 较大。每次调用自身都会在系统栈中压入新的栈帧(保存参数、返回地址等)。 较小。通常只使用固定的内存空间来存储变量,没有额外的栈开销。
时间效率 相对较低。存在函数调用的开销,且可能包含重复计算(如朴素斐波那契递归)。 相对较高。仅仅是循环内的指令重复执行,运行时间随次数线性增加。
代码可读性 高。将大问题转化为小问题,代码简洁,逻辑清晰(如数学公式的直接翻译)。 低。有时需要人为剖析问题规律,代码逻辑可能不如递归直观。
结束条件 依靠递归出口(Base Case),满足条件后逐层返回。 依靠计数器或循环条件判断(如 i < n)。
核心定义 函数在运行过程中调用自身。 利用循环(如 for/while)重复执行代码块,变量的旧值推导新值。
执行结构 呈现为树状结构(深度优先),有“递推”和“回归”两个过程。 呈现为环状结构,从初始状态开始,不断更新状态直到结束。
空间开销 较大。每次调用自身都会在系统栈中压入新的栈帧(保存参数、返回地址等)。 较小。通常只使用固定的内存空间来存储变量,没有额外的栈开销。
递归与迭代的关系
上机操作2
def hanno(n,s,m,t):
#定义一个函数,n层塔,将盘子从s借助m移动到t
if n==1:
print(s,'-->',t) #将一个盘子从s移动到t
else:
hanno(n-1,s,t,m) #将前n-1个盘子从s移动到m上
print(s,'-->',t) #将最底下的最后一个盘子从s移动到t上
hanno(n-1,m,s,t) #将m上的n-1个盘子移动到t上
n=int(input('请输入汉诺塔的层数:'))
hanno(n,'A','B','C')
input("运行完毕,请按回车键退出...")
根据图示一起完善程序吧。
谢谢观看
高中信息技术《数据与计算》科教版 制作人:陆兴涛
$