深耕专业教研,探索前沿技术
信息技术来源:2025学年第二学期天域全国名校协作体高三4月联考

第 10 题

答案与解析

本题解析

参考答案

D

解题思路

函数f在n≤2时直接返回,否则调用f(n-1)和f(n-2),参数逐步减小至出口,再将两个返回值相加,属于递归结构。函数g则通过循环更新两个相邻项。

程序分析

x = int(input())
if f(x) == g(x):
    print(True)
else:
    print(False)

主程序读入x,依次调用f(x)、g(x),比较两个返回值;相等时输出True,否则输出False。先看f如何求值,再看g的更新过程。

def f(n):
    if n <= 2:
        return n
    return f(n-1) + f(n-2)

对正整数n,出口给出f(1)=1、f(2)=2;n>2时满足f(n)=f(n-1)+f(n-2)。因此各项依次为1、2、3、5、8、……。每次非出口调用都要计算两个子问题,且相同参数的子问题会被重复计算。

def g(n):
    a, b = 1, 2
    for i in range(3, n+1):
        a, b = b, a + b
    if n >=2:
        return b
    else:
        return a

a、b初值为1、2。循环中同时赋值使用更新前的值,使a变为原来的b,b变为原来两数之和,因而将相邻两项向后推进一项。第i轮结束后,a、b分别保存第i-1项和第i项。n≥3时循环推进至第n项并返回b;n=2时不进入循环,返回初值b=2;n=1时返回a=1。

选项分析

A

错误。f通过函数自调用求解,采用递归;g通过for循环逐次更新,采用迭代。

B

错误。设T(n)为计算f(n)时包含本次调用在内的总调用次数,则T(1)=T(2)=1,T(n)=1+T(n-1)+T(n-2)。依次得到T(3)=3、T(4)=5、T(5)=9。即使不计主程序发起的首次调用,后续调用也有8次。

C

错误。f反复计算相同子问题,调用次数呈指数级增长;g对n≥3只循环n-2次,时间复杂度为O(n),效率高于f。

D

正确。两个函数具有相同的前两项,并按相同的“前两项之和”生成后续各项,因此对任意正整数x,两者的返回值相等,程序输出True。这里按题目通常的算法分析口径,不考虑实际运行环境的递归深度和资源限制。