信息技术来源:2025学年第二学期浙江省名校协作体高三试题
第 10 题
答案与解析
本题解析
参考答案
D
解题思路
甲用循环累乘,乙的候选代码在函数f中再次调用f,采用递归结构。两者要对任意正整数n输出相同结果,需要先从甲确定累乘的因子,再确定乙的递归出口和递推关系。
程序分析
k = 1
for i in range(n % 2, n, 2):
k = k * (i + 2)
print(k)k初值为1,每轮乘以i+2。n为偶数时,i依次为0、2、…、n-2,乘入的因子为2、4、…、n;n为奇数且大于1时,i依次为1、3、…、n-2,乘入的因子为3、5、…、n。n=1时循环不执行,输出初值1。因此,甲求的是不超过n、与n奇偶性相同的正整数之积,其中因子1不影响乘积。
def f(n):
if ①:
return n
else:
return ②
print(f(n))乙从print(f(n))调用函数f,输出函数返回值。函数分为两个分支:满足①时直接返回n,否则通过②求返回值。前一分支需要处理能直接得到结果的边界,后一分支需要把其余情况化为规模更小的同类问题。
填空分析
①
甲在n=1时输出1,在n=2时输出2,这两种情况均可直接返回n。因此递归出口应覆盖1和2;题目限定n为正整数,填写n <= 2。若只写n < 2,偶数递归到2时还会继续调用f(0),返回0并使乘积变为0。
②
n>2时,从甲的乘积中取出最后一个因子n,剩余部分恰好是参数n-2对应的乘积,所以f(n)=n×f(n-2),填写n * f(n - 2)。参数每次减2,奇数最终到1,偶数最终到2,均能到达出口;使用n+2则会远离出口。例如f(5)依次调用f(3)、f(1),再由f(1)=1返回合成f(3)=3、f(5)=15。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_03_G3_mingxiaoxiezuoti_q010
