高效作业15 第15课 迭代与递归-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)

2025-10-08
| 12页
| 30人阅读
| 2人下载
浙江良品图书有限公司
进店逛逛

资源信息

学段 高中
学科 信息技术
教材版本 高中信息技术浙教版选修1 数据与数据结构
年级 高二
章节 5.2 迭代与递归
类型 作业-同步练
知识点 -
使用场景 同步教学-新授课
学年 2024-2025
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 DOCX
文件大小 235 KB
发布时间 2025-10-08
更新时间 2025-10-08
作者 浙江良品图书有限公司
品牌系列 精彩三年·高中同步课程探究与巩固
审核时间 2025-07-11
下载链接 https://m.zxxk.com/soft/52989646.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

高效作业15[第15课 迭代与递归](见学生用书P227) 学科网(北京)股份有限公司 【A级 新教材落实与巩固】 1.有如下Python程序段: lis=['a','b','c','d'] s=0 for i in lis: c=ord(i)-ord('a') s+=c print(s) 执行该程序段后,输出s的值为( C ) A. 4  B. 5  C. 6  D.10 【解析】 将列表lis中的小写字母转换为英文字母表中的对应位置,s=0+1+2+3=6,选项C正确。 2. 使用Nilakantha 无穷级数求圆周率pi 的公式为: pi=3+4/(2*3*4)-4/(4*5*6)+4/(6*7*8)-4/(8*9*10)… 计算该公式的Python 程序段如下: pi=0;n=50;i=1;p=3 while i<=n: print(pi) 程序段中加框处的代码由以下三部分组成: ①pi+=p ②p=(-1)**(i+1)*4/((2*i)*(2*i+1)*(2*i+2)) ③i+=1 下列选项中,代码顺序正确的是( B ) A.③②① B.①②③ C.②①③ D.②③① 【解析】 先将上一次计算好的p累加到pi中,再计算新的p,由i=1开始循环,先计算p,再后移i,选项B正确。 3. 有如下Python程序段,功能为将输入的二进制(字符串)转化成十进制数输出。 def mybtod(b): d=0 # return d b=input() print(mybtod(b)) 为实现上述程序功能,则加框处的代码不可能是( B ) A.for i in range(len(b)): d=d+int(b[i])*pow(2,len(b)-i-1) B.for i in range(len(b)): d=d+int(b[i])*pow(2,i) C.for i in range(len(b)): d=d+int(b[len(b)-i-1])*pow(2,i) D.for i in b: d=d*2+int(i) 【解析】 选项B,当i=0时,提取的是二进制数的最高位,pow(2,0)=20,0为最低位的乘幂,不符合,选项错误。 4.有表达式s=+++…, 现根据输入的表达式项数,求s 的值,Python 程序段如下: def sum(n): s=0;x=2;y=1 for i in range(0,n): # return s n=int(input(”请输入表达式的项数: ”)) print(sum(n)) 上述程序中加框处可选的代码有: ①x=x+y ②y=x ③s=s+x/y ④y=x-y 下列选项中,代码顺序正确的是( C ) A.③②① B.③①② C. ③①④ D.③④① 【解析】 s初始值为0,则先将2/1累加到s中,先是③;接着计算x的值,是①;最后更新y的值,由于x已经变了,②不符合,应是④,选项C正确。 5. 一个球从某一高度h(单位:米)落下,每次落地后反弹回原来高度的一半,再落下。编写Python程序计算球在第10 次落地时,经过的距离s,程序代码段如下: h=20.0;s=h for i in range(9): # print(s) 程序段中加框处的代码由以下三部分组成: ①l=h*2 ②h=h/2 ③s=s+l 下列选项中,代码顺序正确的是( B ) A.①②③ B.②①③ C.③①② D.②③① 【解析】 Python 语言中,使用变量需要先定义后使用,因此③在①之后。第一次落地,经过的距离为h,即s 的初值,后续落地都是先上升后落下,经过的是2 段路程,上升距离是原高度h 的一半,这个过程可以用②①表示。选项B正确。 6.小明编写了一段Python程序,用于检测输入的四位整数abcd是否满足下述关系:(ab+cd)2=abcd,程序代码如下: k=int(input(“输入一个四位数: ”)) ①____________ y=k%100 if ②______________: print(“符合条件”) else: print(“不符合条件”) 则①、②处填入的代码应为( D ) A.①x=k/100 ②(x+y)*2!=k B.①x=k//100 ②(x+y)*2==k C.①x=k/100  ②(x+y)**2!=k D.①x=k//100 ②(x+y)**2==k 【解析】 ①求出前两位数字,采用移位思想,x=k//100,选项A、C排除;②利用公式(ab+cd)2=abcd判断,(x+y)**2==k,选项D正确。 7.小明编写程序,计算表达式1-+-+…的前n项和,实现的Python程序段如下: n=int(input(“请输入项数:”)) f,i=1,1 s=0 for i in range(1,n+1): # print (“前n项和为”,s) 上述程序中加框中的代码由以下三部分组成: ①f=-f ②s+=f/m ③m=2*i-1 下列选项中, 代码顺序正确的是( C ) A.①③② B. ①②③ C. ③②① D.②③① 【解析】 f初始值为1,则需要先计算-1/3,将f取反,③②①和③①②都正确,选项C正确。 8.2023·义乌中学检测生成一组由数字1~8 组成的8 位不重复的随机密码,Python 程序段如下: from random import * a=[0]*8 for i in range(8): a[i]=i+1 k=8;s=” for i in range(8): m=randint(0,k-1) # print(s) 上述程序段中加框处的代码由以下三部分组成: ①k-=1 ②a[m]=a[k-1] ③s+=str(a[m]) 下列选项中,代码顺序正确的是( D ) A.①②③ B.②③① C.②①③ D.③②① 【解析】 利用第1个for循环,依次产生“1~8”8个数,a=[1,2,3,4,5,6,7,8];第2个for循环,随机产生索引,并连接到s中,之后用k-1位置的数将m位置的数替换,总数k自减1个,选项D正确。 9.有如下Python 程序段: def f(x): if x==1: return 1 else: return x*f(x-1) s=0 for i in range(1,6): s+=f(i) print(s) 执行该程序段后,变量s的值为( D ) A.33 B.34 C.154 D.153 【解析】 通过自定义函数的关键代码“x*f(x-1)”,发现该函数是通过递归算法计算x 的阶层。后面的循环是把1 到5 的阶层进行累加,1!+2!+3!+4!+5!=1+2+6+24+120=153,选项D正确。 10.小王走楼梯时,每次走1个台阶或2个台阶。编写Python程序段,计算小王走n个台阶时,有多少种不同的走法。 def upstairs(n): if n==0 or n==1: return 1 else: return upstairs(n-1)+upstairs(n-2) n=int(input('请输入楼梯有几个台阶: ')) way=upstairs(n) print(way) 当输入的楼梯有10个台阶时,有多少种走楼梯的方法?( B ) A.88   B.89   C.90   D.91 【解析】 利用递归的方法求解数列: 1 1 2 3 5 8 13 21 34 55 89 0 1 2 3 4 5 6 7 8 9 10 选项B正确。 11.有如下Python 程序段: def trans(m,n): if m!=0: r=m%n return trans(m//n,n)+str(r) else: return ”0” a=int(input(”a=”)) b=int(input(”b=”)) print(trans(a,b)) 执行该程序段,依次输入11 和2,则输出的结果是( C ) A.1011 B.1101 C.01011 D.11010 【解析】 列出表格如下: trans(11,2) trans(5,2) trans(2,2) trans(1,2) trans (0,2) 返回 值 trans(5,2)+“1” trans(2,2)+“11” trans(1,2) +“011” trans(1,2) +“1011” “01011” 选项C正确。 12.有如下Python程序段: def f(x): if x==1 or x==2: return 1 else: return f(x-1)+f(x-2) s=0 for i in range(2,6): s+=f(i) print(s) 执行该程序段后,变量s的值为( D ) A. 20 B. 19 C. 12 D.11 【解析】 本题的递归式是f(x)=f(x-1)+f(x-2),边界值为:当x为1或2时,返回1,即x从3开始,f(x)为前两项的和,循环中s对f(2)到f(5)进行求和,即s=1+2+3+5=11。选项D正确。 13. 2023·湖州中学检测有如下Python 程序段: def output(s,n): if n==0: return print(s[n-1],end=””) output(s,n-1) s=input(”input a string:”) x=len(s) output(s,x) 执行该程序段,输入“12345”,则下列说法正确的是( C ) A.输出的结果为12345 B.有0 个输出 C.n 为0 是递归结束的条件 D.程序无法结束 【解析】 选项A,输出结果为5 4 3 2 1,选项错误;选项B,解析同上有输出,选项错误;选项C,递归的出口是n==0,即为递归结束的条件,选项正确;选项D,可以正常结束,选项错误。 14.李华同学尝试使用递归算法来实现斐波那契数列求值,用Python 程序实现如下: def fibo(n): if n==0 or n==1: s=n else: s=fibo(n-1)+fibo(n-2) return s n=int(input(”输入所求项: ”)) print(fibo(n)) 关于递归算法及其应用,下列说法正确的是( A ) A.递归算法的执行过程分递推和回归两个阶段 B.计算机在执行递归程序时,通过队列的调用来实现 C.使用上述递归算法求斐波那契数列,时间复杂度为O(n) D.求斐波那契数列的第6 项fibo(5)时,fibo(3)被调用了3 次 【解析】 选项B,计算机在执行递归程序时,通过栈的调用来实现,选项错误;选项C,使用上述递归算法求斐波那契数列,时间复杂度为O(n2),选项错误;选项D,fibo(3)被调用了2次,选项错误。 【B级 素养形成与评价】 15.下列关于数据结构与算法效率的说法中,不正确的是( C ) A.队列和栈都是一种线性表,但两者有不相同的特性 B.采用相同公式求解n!,使用迭代算法比递归算法的算法效率高 C.使用数组结构进行数据插入和删除操作时,一定会引起数据移动 D.某单向链表(节点数>2)设有头尾指针,在删除该链表尾节点时需要遍历多个节点 【解析】 选项A,队列和栈都是一种线性表,队列的特性是先进先出,栈的特性是先进后出,两者有着不相同的特性,选项正确。选项B,递归求n!,要递推和回归两个阶段(分解问题,逐级返回);迭代求n!,循环代码中参与运算的变量作为下一次循环计算的初始值。当n 越大,迭代算法的效率明显高于递归算法,选项正确。选项C,使用数组这种数组结构在数组尾部进行数据插入和删除操作时,不会引起数据移动,选项错误。选项D,链表的操作需要从头指针开始,遍历到需要操作的节点,因为某单向链表(节点数>2),所以在对该链表进行删除尾节点的操作时,需要遍历从头指针开始到尾指针的多个节点,选项正确。 16.学校举行大合唱比赛,每个班级演唱结束后会由10 个评委打分,最终得分的计分规则为:去掉一个最高分,去掉一个最低分,求剩余分数的平均分。 编程Python 程序,实现快速计分,代码如下: n=10 scores,maxs,mins=0,0,10 for i in range(n): s=float(input(”第”+str(i+1)+”个评委给分: ”)) if maxs<s: maxs=s if mins>s: mins=s scores+=s avg=____________# print(”平均分为: ”+str(round(avg,2))) 下列关于该程序的说法中不正确的是( B ) A. 将“if”改为“elif”,程序功能改变 B. 划线处代码为“(scores-maxs-mins)/n-2” C. 倒数第2 行代码取消缩进,算法更加优化 D.此程序段只适用于满分不超过10 的情况 【解析】 选项B,划线处代码为“(scores-maxs-mins)/(n-2)”选项错误。 17.2022·浙江6月选考列表a有2×n个元素,各元素为互不相等的正整数(n≥1),要在其中找到最大值和次大值,并分别存储到变量m1和m2中。实现该功能的Python程序段如下: m1=0;m2=0 for i in range(0,2*n,2): if a[i]>a[i+1]: t1=a[i];t2=a[i+1] else: t1=a[i+1];t2=a[i] if: m1=t1;m2=t2 elif: m2=m1;m1=t1 elif: m2=t1 上述程序段中加框处可选的代码有: ①t1>m1 ②t1>m2 ③t2>m1 下列选项中,代码顺序正确的是( C ) A.①②③ B.②③① C.③①② D.③②① 【解析】 for循环中,将数组分成n组,相邻的两个数为一组。第一个if语句的作用是将相邻的两个数中较大的值存储在t1中,较小的值存储在t2中。第二个if语句的作用是对前面的数据进行进一步处理,将最终的最大值存放于m1中,次大值存放于m2中。解题的关键是if语句的分支(3),该分支处理的是m2=t1,因此可以推断该分支的条件是t1>m2,即②。选项C正确。该代码的算法思想是:(1)若t2>m1,此时应该赋初值,将t1赋给m1,t2赋给m2;(2)若t1>m1,且t2<=m1,此时应该同时更新m1和m2,即现将当前的次大值m1赋给m2,再将当前的最大值t1赋给m1;(3)在t2<=m1,且t1<=m1,m1>m2时,若t1>m2,说明此时m2还不是次大值,需要更新其值,故m2=t1。 18.2023·丽水中学检测定义函数isPalidrome() 用于判断回文字符串: def isPalidrome(s): if len(s)<=1: return True elif s[0]!=s[len(s)-1]: return False else: return __________# 上述Python程序段中横线处可选的代码有: ①isPalidrome(s[1:-1]) ②isPalidrome(s[2:-1]) ③isPalidrome(s[1:len(s)-1]) ④isPalidrome(s[2:len(s)-1]) 下列选项中,可填入横线处的代码为( D ) A.②或③ B.③或④ C.①或② D.①或③ 【解析】 该分支语句用于判断字符串s 中的第二个字符到倒数第二个字符是否满足回文串特性,根据字符串分片操作,选项D 正确。 19. 丑数是指不能被2、3、5 以外的质数整除的数。判断丑数的Python自定义函数程序如下: def ugly(n): for i in [2,3,5]: return n==1 若调用执行自定义函数ugly(30),下列说法正确的是( B ) A.函数返回值为False B.方框中的程序应用了迭代算法 C.该程序的时间复杂度为O(n2) D.条件语句n%i==0 执行了3 次 【解析】 题目中对丑数的描述等价于:丑数是指只能被2、3、5 整除的数。选项A,30=2×3×5,不能被2、3、5 以外的质数整除,说明30 是丑数,自定义函数应返回True,选项错误;选项B,方框中的程序为当n 能被i 整除时,不断求n 除以i 的商,是一个重复反馈的过程,选项正确;选项C,for 循环次数为列表的长度,while 循环次数是条件成立次数,该程序外循环执行3次,内循环最多执行log2n次,最大时间复杂度为O(log2n),选项错误;选项D,条件语句n%i==0 执行了6 次,选项错误。 20.2023·学军中学检测 已知s=2+4+6+8+…+2×n,为求s <1500 时,n 的最大值,小明编写了如下三个自定义函数f1()、f2()、f3(),其语句的总执行次数分别用T1、T2、T3 表示,则它们之间的关系为( C ) A.T1<T2<T3   B. T3<T2<T1 C. T3<T1<T2   D.T1<T3<T2 【解析】 T1每次循环减去i;T2只有当i为偶数才减去i,s变小的速度慢;T3没有循环,故T3<T1<T2,选项C正确。 21.有如下两个Python 程序段: #程序段1 def rec(n): if :  #①  #② else: return n+rec(n-1) print(rec(10)) #程序段2 def rec(n): ans=0 for i in range(1,n+1,1): ans=ans+ i return ans print(rec(10)) 下列关于两个程序段的说法中,正确的是( D ) A.程序段1 和程序段2 的输出结果不相同 B.程序段1 和程序段2 都采用了递归算法 C.若问题规模为n,程序段2 的时间复杂度为O(n2) D.程序段1 中,将方框①、②中的数字1 同时修改为0,输出结果不变 【解析】 阅读程序段1,可知为使用递归算法实现求10+9+…+1 的结果;阅读程序段2,可知为使用迭代算法实现求1+2+…+10的结果。因此两段程序输出结果相同,选项A错误;程序段2 为迭代算法,选项B错误;程序段2 中只有一层循环,时间复杂度为O(n),选项C错误;修改程序段1方框中的代码,仅仅多递归一层函数,但是返回值+0并不会影响输出结果,选项D正确。 22. 2023·杭四中学检测对于如下两个Python程序段,下列说法不正确的是( B ) #程序段1 a=2 res=1 n=int(input()) for i in range(n): res=res*a print(res) #程序段2 def powr(a,n): if n==1: return a elif n==0: return 1 else: tmp=powr(a,n//2) return tmp*tmp a=2 n=int(input()) print(powr(a,n)) A. 若输入n=8,程序段1、2都将输出256 B. 若输入n=10,程序段1、2都将输出1024 C. 程序段1的算法时间复杂度是O(n) D.程序段2 的算法时间复杂度是O(log2n) 【解析】 选项A、B根据输入的值模拟运行得到相应的值。如选项B中,当n=10 时,递归调用过程是:powr(2,10)→powr(2,5)→powr(2,2)→powr(2,1)→2。于是回归后powr(2,2)的值是2*2=4,powr(2,5)的值是4*4=16,powr(2,10)的值是16*16=256,最终结果是256。选项B错误。选项C,程序段1的循环次数是n 次,算法时间复杂度是O(n)。选项D,程序段2的调用过程是:powr(a,n)→powr(a,n//2)→powr(a,n//4)→powr(a,n//8)→…→powr(a,1),这里调用的次数约为log2n 次(n 除以几个2 会成为1),因此算法时间复杂度是O(log2n)。 23.有如下Python 程序段: #程序段1 def fac(n): s=1 for i in range(1,n+1):  s=s*i return s print(fac(5)) #程序段2 def fac(n): if n==1: return 1 else: return n*fac(n-1) #① print(fac(5)) 下列关于两个程序段的说法中,正确的是( C ) A. 程序段1 和程序段2 都使用了递归算法 B. 若问题规模为n,则程序段1 和程序段2 的时间复杂度不同 C. 若程序段1 中问题规模为n,则n 的值就是其循环执行的次数 D.若程序段2 中自定义函数内的代码只保留①处语句,也能获取到目标值 【解析】 选项A,程序段1 没有使用递归算法,选项错误;选项B,两段程序的算法复杂度都是O(n),选项错误;选项C,根据代码“for i in range(1,n+1)”可知,n 的值就是其循环执行的次数,选项正确;选项D,递归代码,在递推阶段必须有终止递推的代码,选项错误。 24.已知任取两个自然数,其互质(没有大于1的共同因数)的概率是,小蓝据此编写了Python程序: from math import sqrt from random import randint def fun(a,b): if b==0: return a else: return fun(b,a%b) cnt=0 n=1000;m=100000 for i in range(n): a=randint(1,m) b=randint(1,m) if fun(a,b)==1: cnt+=1 print(sqrt(6*n/cnt)) 程序用频率估计概率,以验证该结论的准确性,下列说法正确的是( D ) A.程序输出结果就是的近似值 B.该程序所描述算法的时间复杂度为O(n) C.函数fun()用递归算法求两个正整数的最小公倍数 D.要想提高程序结果的精确度,可以扩大n和m的范围 【解析】 选项A,根据公式,这是计算圆周率的近似值的公式,选项错误;选项B,本段代码的算法复杂度,除了for循环,还要考虑函数fun()的复杂度,函数fun()是用欧几里得算法求两个数的最大公约数,复杂度是O(log(mix(a,b)),最终的算法复杂度是O(log(mix(a,b)*n),选项错误;选项C,是求两个数的最大公约数,选项错误;选项D,用概率的方法求近似值时,样本规模越大,得出的值越接近,选项正确。 25.2023·开化中学检测给定两个数,设计一个求最大公约数和最小公倍数的算法,该Python程序的运行结果如图所示: 请在横线处填入合适的代码。 def gys(x,y): #求最大公约数 if x>y: x,y=y,x r=1 for i in range(2,x+1): if ①__x%i==0__and__y%i==0__:    r=i return r def gbs(x,y): #求最小公倍数 if x<y: x,y=y,x i=x while True: if i%x==0 and i%y==0:    ②__break__ i+=1 return i m=int(input(”请输入第一个数: ”)) n=int(input(”请输入第二个数: ”)) print(m,”和”,n,”的最大公约数是: ”,gys(m,n)) print(m,”和”,n,”的最小公倍数是: ”,③__gbs(m,n)__ ) 【解析】 ①如果i能同时被x,y整除,则更新最大公约数,答案为x%i==0 and y%i==0。②若条件“i%x==0 and i%y==0”成立,则这是最小公倍数,不用继续查找下去,答案为break。③调用函数求解最小公倍数,答案为gbs(m,n)。 26.查找100以内的素数对。素数是指除了1和本身之外不再有其他因子的数。若两个素数的差为2,则称这两个素数为素数对。下列Python程序的功能是找出100以内的素数对,成对输出并统计对数。程序运行界面和代码如下,请在横线处填入合适的代码。 def isp(m): flag=True for i in range(2,m): if m%i==0: flag=False break ①__return__flag__ # 主程序 cnt=0 p1=isp(3) i=5 while i<100: ②__p2=isp(i)__ if p1 and p2: print(str(i-2)+”  ”+str(i)) cnt+=1 ③__p1=p2__ i+=2 print(”共找到”+str(cnt)+”对”) 【解析】 题目中自定义函数的功能是判断是否素数,判断结果返回flag;程序需要找出100以内所有素数对,利用迭代算法思想解决该问题,用变量p1和p2表示枚举的素数对情况,p2获得从5开始的素数判断结果,p1迭代为上一轮数对p2的值。 学科网(北京)股份有限公司 $$

资源预览图

高效作业15 第15课 迭代与递归-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
1
高效作业15 第15课 迭代与递归-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
2
高效作业15 第15课 迭代与递归-【精彩三年】2024-2025学年高中信息技术选择性必修1课程探究与巩固Word教参(浙教版2019)
3
所属专辑
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。