深耕专业教研,探索前沿技术
信息技术来源:浙江七校2026年普通高等学校招生全国统一考试模拟考试

第 10 题

答案与解析

本题解析

参考答案

A

解题思路

函数在a[x]≠x时调用自身f(a[x]);当a[x]=x时不再递归,直接返回a[x]。递归沿数组值所指向的下标继续访问,本题给定数组中的这条访问路径能够到达出口。

程序分析

def f(x):
    if a[x] != x:
        a[x] = f(a[x])
    return a[x]

执行a[x] = f(a[x])时,要先完成右侧的递归调用,再把返回值写入当前层的a[x]。随后return a[x]将这个值继续返回上一层。因此,递归到达出口后,返回值会逐层回传,并写入沿途访问过的数组元素;未被访问的元素不受影响。

执行f(0)时,递归调用路径为f(0)→f(1)→f(3)→f(4),因为原数组中a[0]=1、a[1]=3、a[3]=4。到达f(4)时,a[4]=4,满足出口条件,返回4。

返回过程如下:

返回到的调用 执行的赋值 本层返回值
f(3) a[3]=4 4
f(1) a[1]=4 4
f(0) a[0]=4 4

a[2]和a[5]未被访问,仍分别为1、5。因此f(0)返回4,数组变为[4,4,1,4,4,5]。