内容正文:
第03讲 函数与算法
内容导航
01
命题透视·考情前瞻
对标素养,研判高考命题趋势
02
思维建模·脉络梳理
搭建知识框架,构建系统思维
03
考点精讲·靶向突破
拆解核心考点,归纳解题范式
考点一 自定义函数与模块导入
知识解构 知识点1 自定义函数与模块导入
知识点2 参数传递(类值传递、类引用传递)
知识点 3 模块导入的多种方式
考向破译 考向1 函数调用、return、局部变量辨析
考向2 可变 / 不可变对象参数传递推演
考向3 模块导入的多种方式
考点二 解析算法与枚举算法思想
知识解构 知识点1 解析算法
知识点2 枚举算法(三要素、程序框架)
考向破译 考向1 解析算法数学公式转换为代码填空
考向2 枚举算法框架理解与代码填空
考点三 迭代与递归算法
知识解构 知识点1迭代算法
知识点2 递归算法:递归定义、基线条件、递归调用、调用栈
考向破译 考向1 递归调用结果手动推演(选择题必练)
考向2 追踪递归调用栈与多层局部变量变化
考向 3 递归算法代码填空
考点四 时间复杂度初步估算
知识解构 知识点1 大O表示法,常见复杂度阶
知识点2 简单循环、递归的时间复杂度估算
考向破译 考向1 根据代码片段判断时间复杂度
考向 2 结合算法特征辨析复杂度阶
04
真题溯源·考向感知
溯源真题逻辑,感知高考考向
命题透视·考情前瞻
——对标素养,研判高考命题趋势
考点要求
考查形式
2026年
2025年
2024年
自定义函数、参数传递、模块导入
þ选择题
非选择题
浙江卷 1 月 T8,2 分
浙江卷 6 月 T14,填空
浙江卷 6 月 T10,2分
浙江卷 1 月 T11,2分
解析、枚举算法思想与代码实现
选择题
非选择题
浙江卷 6 月 T15,9分
浙江卷 6 月 T13,填空
浙江卷 1 月 T15,9分
迭代、递归调用结果推演、调用栈追踪
þ选择题
非选择题
浙江卷 1 月 T12,2分
浙江卷 6 月 T12,2分
浙江卷 6 月 T11,2分
时间复杂度初步估算
þ选择题
非选择题
浙江卷 6 月 T7,2分
浙江卷 1 月 T8,2分
浙江卷 6 月 T9,2分
考情分析:
1.浙江信息技术选考中,函数与算法属于核心高频模块。选择题侧重:递归调用结果判断、参数传递带来变量变化辨析、时间复杂度判断;非选择题常结合真实情境,把解析 / 枚举算法嵌入函数,考查代码填空、读懂递归执行流程。
2.从命题思路上看,
(1)自定义函数重点考查实参与形参、可变对象 / 不可变对象参数传递效果(Python 无纯粹值 / 引用传递,表现出类值、类引用效果),经常结合列表、二维列表考查函数内修改是否影响外部变量。
(2)解析算法重在公式转化为代码;枚举算法重在确定枚举范围、设置判断条件,常考循环 + 分支框架。 (3)递归是难点:必须识别基线条件;读懂调用栈 “先调用后返回,后进先出”;区分递归与迭代;注意递归深度限制。
(4)时间复杂度只要求初步估算,掌握常见 O (1)、O (n)、O (log n)、O (n²),去掉常数、低阶项,只保留最高阶。
复习目标:
1. 掌握自定义函数 def 语法、return 返回值;分清形参实参,理解可变 / 不可变对象作为参数时的传递效果;掌握 import 模块多种写法。
2. 区分解析算法与枚举算法,能把数学公式转解析代码,能写出枚举算法完整框架(确定范围 + 判断条件)。
3. 理解迭代与递归;能手动追踪递归调用栈、多层递归局部变量变化,识别基线条件,区分递归终止与死递归。
4. 会简单估算循环、递归的时间复杂度大 O 阶。
思维建模·脉络梳理
——搭建知识框架,构建系统思维
考点精讲·靶向突破
——拆解核心考点,归纳解题范式
考点一 自定义函数与模块导入
知●识●解●构
知识点1 自定义函数的定义、调用、返回值
1. 定义语法:
· 形参:定义函数括号内变量;实参:调用函数传入的实际数据。
· return作用:①结束函数运行;
②把结果返回给调用处;一条return执行后,后续代码不再运行。
· 函数内部变量是局部变量,默认不能直接在函数外部访问。
2. 示例:
知识点2 参数传递(类值传递、类引用传递)
Python语言本身是对象引用传递,根据对象可变与否表现两种效果。
1. 不可变对象(int、float、字符串str、元组tuple):类值传递效果
函数内部对形参重新赋值,不会改变外部实参。
2. 可变对象(列表list、字典dict):类引用传递效果
如果修改对象内部元素,外部原始对象同步改变;
⚠注意:如果给形参整体重新赋值(如lst=[1,2]),是让形参指向新列表,不会改变外部原列表。
示例1(修改列表内部元素,外部跟着变)
示例2(形参整体赋值,不改变外部)
知识点3 模块导入
导入写法
说明
使用方式
import random
导入整个random模块
random.randint(1,10)
from random import randint
只导入randint函数
直接写randint(1,10)
from random import *
导入模块全部内容,不推荐
直接调用函数
选考常考:import random、import math。
考●向●破●译
考向1 函数调用、return、局部变量辨析(选择题)
例1 (2025宁波一模 第10题) 有如下Python程序段:
from random import randint
def fun(a,x):
r=0
for i in range(len(a)):
if a[i]%x != 0:
a[r]=a[i]
r+=1
return a[:r]
a=[3,5,16,9,8,5]
t=randint(3,5)
a=fun(a,t)
则运行程序后,a的值不可能是( )
A. [5,16,8,5] B. [3,5,9,5] C. [3,5,16,9] s D. [3,16,9,8]
例2(Z20 名校联盟 20252026 学年高三上第二次联考 第 9 题)
关于 Python 函数,下列说法正确的是()
A. 没有return语句的函数调用后会报错
B. return返回多个值时必须使用列表进行包裹
C. 函数内部定义的局部变量,不能在函数外部直接使用
D. 调用函数时实参只能使用变量,不能使用表达式
考向2 可变对象参数传递推演(选择题)
例1(2026 届宁波市高三二模 第 10 题)
有如下 Python 程序段:
def func(x, arr):
x = x * 2
arr[1] += x
num = 6
ls = [2, 5, 7]
func(num, ls)
print(num, ls[1])
执行该程序段后,输出的结果是()
A.6 17 B.12 17 C.6 11 D.12 11
考向3 函数相关代码填空(非选择题)
例1【七彩阳光 20252026 学年高三返校联考 第 13 题节选】
编写函数 calc_sum,计算 [a,b] 闭区间所有整数的和。
def calc_sum(a,b):
s=0
for i in range(a,b+1):
s += i
____________
res=calc_sum(2,10)
print(res)
划线处应填入的语句为________。
考点二 解析算法与枚举算法思想
知识点1 解析算法
解析算法:直接使用数学公式、关系式,把已知量代入公式直接求解,不需要遍历全部可能。
· 核心:找到问题数学表达式,翻译为Python代码。
示例:已知三边a,b,c求三角形面积(海伦公式)
知识点2 枚举算法
枚举算法:把问题所有可能的解,不重不漏全部列举出来,用条件判断筛选符合条件的正确解。
1.枚举三要素:
(1)枚举对象:要尝试的变量;
(2)枚举范围:变量取值区间,用for/while循环实现;
(3)判断条件:if判断,筛选真正满足题意的解。
2.基础框架模板:
3.示例:百钱买百鸡,公鸡5元,母鸡3元,小鸡1元3只,100元买100只鸡。
辨析:解析靠公式直接算;枚举靠循环逐个试候选解。
考●向●破●译
考向1 解析算法公式转代码(填空)
例1 (2024宁波一模 第10题) 定义如下函数:
def tob(n):
if n==0:
return ""
else:
return tob(n//2)+str(1-n%2)
执行语句s=tob(10)后,s的值为( )
A. "1010" B. "0101" C. "1001" D. "1100"
例2 (2026金丽衢十二校联考 第10题) 定义如下递归函数:
def f(n,c):
if n <= c:
return 1
else:
return f(n//c,c)+2*c
print(f(15,2))
程序运行结束后,输出结果为( )
A. 10 B. 13 C. 12 D. 11
例3 (2025 届温州市高三二模 第 13 题节选)
竖直上抛运动,高度h=t-g,取g=10,完成函数定义。
def height(v0,t):
g=10
h = ________________
return h
横线处填入表达式:________
考向2 枚举算法框架填空(非选择题高频)
例1 (Z20 名校联盟 2024‑2025 学年高三第三次联考 第14题节选)
求解区间 [20,80] 中,能够同时被3和5整除的全部整数。
res=[]
for i in range(20,________):
if ________________:
res.append(i)
print(res)
(1) 第一空: ;(2) 第二空:
例2 (2026宁波一模 第10题) a数组中有n个元素(n为偶数),现要将所有索引为奇数的元素循环右移两位,索引为偶数的元素不变,如[1,2,3,4,5,6]处理后得到[1,6,3,2,5,4]。实现该功能的Python程序段如下:
n=len(a)
last=a[n-1]
for i in range(① )
②
a[i]=last
则划线处应填入的正确代码为( )
A. ①n-3,0,-2 ②a[i+2]=a[i]
B. ①n-1,1,-2 ②a[i-2]=a[i]
C. ①1,n-1,2 ②a[i+2]=a[i]
D. ①0,n-2,2 ②a[i-2]=a[i]
考点三 迭代与递归算法
知识点1 迭代算法
迭代:利用循环,不断用旧变量计算出新变量,逐步逼近结果。for、while循环就是迭代。
示例:求1+2+…+n
def sum_iter(n):
s=0
for i in range(1,n+1):
s += i
return s
知识点2 递归算法
递归:函数调用自身完成计算,两个必要条件,缺一不可:
1. 基线条件(终止条件):满足条件不再调用自身,直接返回值,防止无限递归;
2. 递归调用:把原问题拆解成规模更小的子问题,调用自己求解子问题。
①递归模板
②示例:阶乘 n! = n!×(n1)!;基线条件:1!=1
def fact(n):
if n==1:
return 1
return n*fact(n-1)
递归调用栈(难点)
· 每次递归调用,系统会保存当前函数局部变量,压入调用栈;
· 先调用、后返回;后调用、先返回(栈:后进先出)。
· 递归深度过大会栈溢出;Python默认递归深度约1000层。
迭代用循环,不产生调用栈;递归靠函数自调用,占用栈空间。
考●向●破●译
考向1 递归调用结果手动推演(选择题必练题型)
例1 (2026杭州上城5地一模 第10题) 对于任意正整数n,调用函数cal(n)返回的结果为n的各位数之和,要实现上述功能,如下程序段中,加框处的代码不能为( )
def cal(n):
if n < 10:
return n
return ▲
A. cal(n//10)+n%10
B. cal(n//10)+cal(n%10)
C. cal(n//100)+n%10+n//10%10
D. cal(n//100)+cal(n%100)
例2 (2025嵊州一模 第10题) 定义如下函数:
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(1,5):
s+=f(i)
执行该程序段后,函数f被调用的次数是( )
A. 10 B. 9 C. 8 D. 7
例3 (Z20 名校联盟 20252026 学年高三上第二次联考 第 10 题) 有如下 Python 程序段:
def f(n):
if n <= 2:
return n
return f(n1)+2*f(n2)
result = 0
for i in range(1,6):
result += f(i)
print(result)
执行程序后,变量 result 的值是()
A.31 B.32 C.63 D.64
考向2 追踪递归调用栈,局部变量变化(难点)
例1(诸暨市 2024‑2025 学年高三 5 月适应性考试 第 11 题)
def dfs(n):
print(n,end="-")
if n==1:
return
dfs(n-1)
print(n,end="-")
dfs(3)
程序运行后的输出是()
A.3‑2‑1‑2‑3‑ B.3‑2‑1‑ C.1‑2‑3‑2‑1‑ D.3‑2‑1‑1‑2‑3‑
考向3 递归代码填空(非选择题)
例1 (Z20 名校联盟 2024 届高三第三次联考 第 13 题节选)
猴子吃桃问题:第 7 天剩余 1 颗桃子;每一天桃子数量 =(后一天桃子数 + 1)*2。完成递归函数。
def peach(day):
if day ==7:
return 1
else:
return ____________
print(peach(1))
横线处填写:________
考点四 时间复杂度的初步估算
知识点1 大O表示法
时间复杂度描述:当输入规模n变大时,程序执行时间增长趋势;忽略常数、低阶项、系数,只保留最高阶项。
复杂度阶
典型场景
O(1)常量阶
简单顺序语句,固定次数执行,与n无关
O(log₂n)对数阶
对分查找,每次问题规模折半
O(n)线性阶
单层循环,循环n次
O(n²)平方阶
双层嵌套循环
示例:
递归时间复杂度简单判断:
斐波那契递归def fib(n): return fib(n1)+fib(n2),时间复杂度O(2ⁿ),效率远低于迭代O(n)版本。
考●向●破●译
考向1 选择题判断时间复杂度
例1 (七彩阳光 2025 年高三 11 月测试 第 8 题)
下列程序段,时间复杂度为O(n)的是()
A.
s=0
for i in range(n):
s += i
B.
i=n
while i>0:
i = i//2
C.
for i in range(n):
for j in range(n):
print(i,j)
D.
print(20*100)
考向2 结合算法特征辨析复杂度阶
例1(2026 届宁波市高三二模 第 8 题)
关于算法时间复杂度,下列叙述正确的是()
A.时间复杂度O()的算法一定比O(n)运行时间短
B.对分查找算法时间复杂度为O(n)
C.双层for循环嵌套,一般情况下时间复杂度为O()
D.大O记法中O(2n)等价于O(2)
真题溯源·考向感知
——溯源真题逻辑,感知高考考向
1. (选考真题・2023 年浙江 6 月信息技术选考 第 10 题)
定义如下函数:
def f(a,s):
if a>=s:
return a
else:
return f(a+1,s-a)
执行语句 k = f (6,21) 后,k 的值为()
A.6 B.7 C.8 D.9
2.(选考真题・2025 年浙江 1 月信息技术选考 第 11 题)
对于任意非空字符串 s,甲、乙程序段输出结果相同,则乙程序段加框处的正确代码为()
甲程序段:
def f(s,t):
if t>=len(s)-2:
return s[t]
return f(s,t+2)+s[t]
print(f(s0,0))
乙程序段:
r=""
n=len(s)
for i in range(0,n,2):
▲
print(r)
A. r=s[n-i]+r
B. r=r+s[n-i-1]
C. r=r+s[i]
D. r=s[i]+r
2 / 3
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
第03讲 函数与算法
内容导航
01
命题透视·考情前瞻
对标素养,研判高考命题趋势
02
思维建模·脉络梳理
搭建知识框架,构建系统思维
03
考点精讲·靶向突破
拆解核心考点,归纳解题范式
考点一 自定义函数与模块导入
知识解构 知识点1 自定义函数与模块导入
知识点2 参数传递(类值传递、类引用传递)
知识点 3 模块导入的多种方式
考向破译 考向1 函数调用、return、局部变量辨析
考向2 可变 / 不可变对象参数传递推演
考向3 模块导入的多种方式
考点二 解析算法与枚举算法思想
知识解构 知识点1 解析算法
知识点2 枚举算法(三要素、程序框架)
考向破译 考向1 解析算法数学公式转换为代码填空
考向2 枚举算法框架理解与代码填空
考点三 迭代与递归算法
知识解构 知识点1迭代算法
知识点2 递归算法:递归定义、基线条件、递归调用、调用栈
考向破译 考向1 递归调用结果手动推演(选择题必练)
考向2 追踪递归调用栈与多层局部变量变化
考向 3 递归算法代码填空
考点四 时间复杂度初步估算
知识解构 知识点1 大O表示法,常见复杂度阶
知识点2 简单循环、递归的时间复杂度估算
考向破译 考向1 根据代码片段判断时间复杂度
考向 2 结合算法特征辨析复杂度阶
04
真题溯源·考向感知
溯源真题逻辑,感知高考考向
命题透视·考情前瞻
——对标素养,研判高考命题趋势
考点要求
考查形式
2026年
2025年
2024年
自定义函数、参数传递、模块导入
þ选择题
非选择题
浙江卷 1 月 T8,2 分
浙江卷 6 月 T14,填空
浙江卷 6 月 T10,2分
浙江卷 1 月 T11,2分
解析、枚举算法思想与代码实现
选择题
非选择题
浙江卷 6 月 T15,9分
浙江卷 6 月 T13,填空
浙江卷 1 月 T15,9分
迭代、递归调用结果推演、调用栈追踪
þ选择题
非选择题
浙江卷 1 月 T12,2分
浙江卷 6 月 T12,2分
浙江卷 6 月 T11,2分
时间复杂度初步估算
þ选择题
非选择题
浙江卷 6 月 T7,2分
浙江卷 1 月 T8,2分
浙江卷 6 月 T9,2分
考情分析:
1.浙江信息技术选考中,函数与算法属于核心高频模块。选择题侧重:递归调用结果判断、参数传递带来变量变化辨析、时间复杂度判断;非选择题常结合真实情境,把解析 / 枚举算法嵌入函数,考查代码填空、读懂递归执行流程。
2.从命题思路上看,
(1)自定义函数重点考查实参与形参、可变对象 / 不可变对象参数传递效果(Python 无纯粹值 / 引用传递,表现出类值、类引用效果),经常结合列表、二维列表考查函数内修改是否影响外部变量。
(2)解析算法重在公式转化为代码;枚举算法重在确定枚举范围、设置判断条件,常考循环 + 分支框架。 (3)递归是难点:必须识别基线条件;读懂调用栈 “先调用后返回,后进先出”;区分递归与迭代;注意递归深度限制。
(4)时间复杂度只要求初步估算,掌握常见 O (1)、O (n)、O (log n)、O (n²),去掉常数、低阶项,只保留最高阶。
复习目标:
1. 掌握自定义函数 def 语法、return 返回值;分清形参实参,理解可变 / 不可变对象作为参数时的传递效果;掌握 import 模块多种写法。
2. 区分解析算法与枚举算法,能把数学公式转解析代码,能写出枚举算法完整框架(确定范围 + 判断条件)。
3. 理解迭代与递归;能手动追踪递归调用栈、多层递归局部变量变化,识别基线条件,区分递归终止与死递归。
4. 会简单估算循环、递归的时间复杂度大 O 阶。
思维建模·脉络梳理
——搭建知识框架,构建系统思维
考点精讲·靶向突破
——拆解核心考点,归纳解题范式
考点一 自定义函数与模块导入
知●识●解●构
知识点1 自定义函数的定义、调用、返回值
1. 定义语法:
· 形参:定义函数括号内变量;实参:调用函数传入的实际数据。
· return作用:①结束函数运行;
②把结果返回给调用处;一条return执行后,后续代码不再运行。
· 函数内部变量是局部变量,默认不能直接在函数外部访问。
2. 示例:
知识点2 参数传递(类值传递、类引用传递)
Python语言本身是对象引用传递,根据对象可变与否表现两种效果。
1. 不可变对象(int、float、字符串str、元组tuple):类值传递效果
函数内部对形参重新赋值,不会改变外部实参。
2. 可变对象(列表list、字典dict):类引用传递效果
如果修改对象内部元素,外部原始对象同步改变;
⚠注意:如果给形参整体重新赋值(如lst=[1,2]),是让形参指向新列表,不会改变外部原列表。
示例1(修改列表内部元素,外部跟着变)
示例2(形参整体赋值,不改变外部)
知识点3 模块导入
导入写法
说明
使用方式
import random
导入整个random模块
random.randint(1,10)
from random import randint
只导入randint函数
直接写randint(1,10)
from random import *
导入模块全部内容,不推荐
直接调用函数
选考常考:import random、import math。
考●向●破●译
考向1 函数调用、return、局部变量辨析(选择题)
例1 (2025宁波一模 第10题) 有如下Python程序段:
from random import randint
def fun(a,x):
r=0
for i in range(len(a)):
if a[i]%x != 0:
a[r]=a[i]
r+=1
return a[:r]
a=[3,5,16,9,8,5]
t=randint(3,5)
a=fun(a,t)
则运行程序后,a的值不可能是( )
A. [5,16,8,5] B. [3,5,9,5] C. [3,5,16,9] D. [3,16,9,8]
答案:C
解析:本题考查自定义函数的调用、return返回值与随机数。函数fun的功能是从前往后遍历列表a,若当前元素不能被x整除,就把它依次从索引0开始顺序写回,最后返回a[:r],返回的是列表的一个切片(新列表),不影响外部原列表的长度。t=randint(3,5)可能取3、4、5:t=3时不能被3整除的数为5,16,8,5,选项A有可能;t=4时不能被4整除的数有3,5,9,5,选项B有可能;t=5时不能被5整除的数有3,16,9,8,选项D有可能。故a的值不可能是选项C。
例2(Z20 名校联盟 20252026 学年高三上第二次联考 第 9 题)
关于 Python 函数,下列说法正确的是()
A. 没有return语句的函数调用后会报错
B. return返回多个值时必须使用列表进行包裹
C. 函数内部定义的局部变量,不能在函数外部直接使用
D. 调用函数时实参只能使用变量,不能使用表达式
答案:C
【解析】 A:函数无 return,默认返回 None,不会报错。 B:return 可直接用逗号返回多个值,不需要列表包裹。 C:局部变量作用域仅限于函数内部,外部无法直接访问,正确。 D:实参可以是常量、变量、表达式。
考向2 可变对象参数传递推演(选择题)
例1(2026 届宁波市高三二模 第 10 题)
有如下 Python 程序段:
def func(x, arr):
x = x * 2
arr[1] += x
num = 6
ls = [2, 5, 7]
func(num, ls)
print(num, ls[1])
执行该程序段后,输出的结果是()
A.6 17 B.12 17 C.6 11 D.12 11
答案:A
【解析】 num为int不可变对象,函数内对形参 x 赋值,不改变外部 num 的值,num=6; ls 是列表可变对象,修改列表元素 arr [1] 会同步影响原列表,ls [1]=5+12=17。输出6 17。
考向3 函数相关代码填空(非选择题)
例1【七彩阳光 20252026 学年高三返校联考 第 13 题节选】
编写函数 calc_sum,计算 [a,b] 闭区间所有整数的和。
def calc_sum(a,b):
s=0
for i in range(a,b+1):
s += i
____________
res=calc_sum(2,10)
print(res)
划线处应填入的语句为________。
答案:return s
【解析】函数计算得到 s,需要通过 return 将计算结果返回给调用处;若无 return,则 res 接收值为 None。
考点二 解析算法与枚举算法思想
知识点1 解析算法
解析算法:直接使用数学公式、关系式,把已知量代入公式直接求解,不需要遍历全部可能。
· 核心:找到问题数学表达式,翻译为Python代码。
示例:已知三边a,b,c求三角形面积(海伦公式)
知识点2 枚举算法
枚举算法:把问题所有可能的解,不重不漏全部列举出来,用条件判断筛选符合条件的正确解。
1.枚举三要素:
(1)枚举对象:要尝试的变量;
(2)枚举范围:变量取值区间,用for/while循环实现;
(3)判断条件:if判断,筛选真正满足题意的解。
2.基础框架模板:
3.示例:百钱买百鸡,公鸡5元,母鸡3元,小鸡1元3只,100元买100只鸡。
辨析:解析靠公式直接算;枚举靠循环逐个试候选解。
考●向●破●译
考向1 解析算法公式转代码(填空)
例1 (2024宁波一模 第10题) 定义如下函数:
def tob(n):
if n==0:
return ""
else:
return tob(n//2)+str(1-n%2)
执行语句s=tob(10)后,s的值为( )
A. "1010" B. "0101" C. "1001" D. "1100"
答案:B
解析:本题考查把数学关系式直接翻译为程序代码的解析思想。函数用n//2把问题规模逐层缩小,用1-n%2直接算出该位应取的字符,是「按公式直接计算」而不是遍历枚举。执行过程:tob(10)→tob(5)+"1"→tob(2)+"0"→tob(1)+"1"→tob(0)+"0",tob(0)返回空串,逐层回代得"0101"。故选B。
例2 (2026金丽衢十二校联考 第10题) 定义如下递归函数:
def f(n,c):
if n <= c:
return 1
else:
return f(n//c,c)+2*c
print(f(15,2))
程序运行结束后,输出结果为( )
A. 10 B. 13 C. 12 D. 11
答案:B
解析:本题考查解析算法中公式的直接代入与求值。f(15,2):15>2,返回f(7,2)+4;f(7,2):7>2,返回f(3,2)+4;f(3,2):3>2,返回f(1,2)+4;f(1,2):1≤2,返回1。逐层回代:f(3,2)=1+4=5,f(7,2)=5+4=9,f(15,2)=9+4=13。故选B。
例3 (2025 届温州市高三二模 第 13 题节选)
竖直上抛运动,高度h=t-g,取g=10,完成函数定义。
def height(v0,t):
g=10
h = ________________
return h
横线处填入表达式:________
答案:v0*t-0.5*g*t**2
【解析】将物理公式直接翻译为 Python 表达式;乘法运算符不能省略,平方使用**。
考向2 枚举算法框架填空(非选择题高频)
例1 (Z20 名校联盟 2024‑2025 学年高三第三次联考 第14题节选)
求解区间 [20,80] 中,能够同时被3和5整除的全部整数。
res=[]
for i in range(20,________):
if ________________:
res.append(i)
print(res)
(1) 第一空: ;(2) 第二空:
答案:(1)81;(2)i%3==0 and i%5==0
【解析】range左闭右开,要包含80,终止参数写81;同时被3、5整除,两个取模条件用逻辑and连接。
例2 (2026宁波一模 第10题) a数组中有n个元素(n为偶数),现要将所有索引为奇数的元素循环右移两位,索引为偶数的元素不变,如[1,2,3,4,5,6]处理后得到[1,6,3,2,5,4]。实现该功能的Python程序段如下:
n=len(a)
last=a[n-1]
for i in range(① )
②
a[i]=last
则划线处应填入的正确代码为( )
A. ①n-3,0,-2 ②a[i+2]=a[i]
B. ①n-1,1,-2 ②a[i-2]=a[i]
C. ①1,n-1,2 ②a[i+2]=a[i]
D. ①0,n-2,2 ②a[i-2]=a[i]
答案:A
解析:本题考查枚举范围(range的起点、终点、步长)的确定与循环体内索引的递推。要把所有奇数索引元素循环右移两位,必须从后往前处理才不会覆盖尚未移动的数据:last先保存a[n-1](最后一个奇数索引元素),循环变量i从n-3开始、到0结束、步长-2,每次令a[i+2]=a[i],把奇数位元素整体后移两位;循环结束后再把last写入a[0]。故①填n-3,0,-2,②填a[i+2]=a[i],选A。
考点三 迭代与递归算法
知识点1 迭代算法
迭代:利用循环,不断用旧变量计算出新变量,逐步逼近结果。for、while循环就是迭代。
示例:求1+2+…+n
def sum_iter(n):
s=0
for i in range(1,n+1):
s += i
return s
知识点2 递归算法
递归:函数调用自身完成计算,两个必要条件,缺一不可:
1. 基线条件(终止条件):满足条件不再调用自身,直接返回值,防止无限递归;
2. 递归调用:把原问题拆解成规模更小的子问题,调用自己求解子问题。
①递归模板
②示例:阶乘 n! = n!×(n1)!;基线条件:1!=1
def fact(n):
if n==1:
return 1
return n*fact(n-1)
递归调用栈(难点)
· 每次递归调用,系统会保存当前函数局部变量,压入调用栈;
· 先调用、后返回;后调用、先返回(栈:后进先出)。
· 递归深度过大会栈溢出;Python默认递归深度约1000层。
迭代用循环,不产生调用栈;递归靠函数自调用,占用栈空间。
考●向●破●译
考向1 递归调用结果手动推演(选择题必练题型)
例1 (2026杭州上城5地一模 第10题) 对于任意正整数n,调用函数cal(n)返回的结果为n的各位数之和,要实现上述功能,如下程序段中,加框处的代码不能为( )
def cal(n):
if n < 10:
return n
return ▲
A. cal(n//10)+n%10
B. cal(n//10)+cal(n%10)
C. cal(n//100)+n%10+n//10%10
D. cal(n//100)+cal(n%100)
答案:D
解析:本题考查递归调用结果的手工推演与return返回值的含义。选项A用cal(n//10)求去掉个位后的各位数之和,再加上个位数n%10,正确;选项B中cal(n%10)即个位数本身,等价于A,正确;选项C把n拆成n//100、十位、个位三部分分别相加,正确;选项D中当n为两位数(如n=50)时n//100=0,cal(0)返回0,而cal(n%100)又以同样的方式继续拆分,递归无法收敛,形成死循环,故不能实现功能。答案为D。
例2 (2025嵊州一模 第10题) 定义如下函数:
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(1,5):
s+=f(i)
执行该程序段后,函数f被调用的次数是( )
A. 10 B. 9 C. 8 D. 7
答案:A
解析:本题考查递归调用过程的手工推演与调用次数统计。f(1)直接返回,调用1次;f(2)直接返回,调用1次;f(3)=f(2)+f(1),共调用1+1+1=3次;f(4)=f(3)+f(2),共调用3+1+1=5次。循环i取1、2、3、4,合计1+1+3+5=10次。故选A。
例3 (Z20 名校联盟 20252026 学年高三上第二次联考 第 10 题) 有如下 Python 程序段:
def f(n):
if n <= 2:
return n
return f(n1)+2*f(n2)
result = 0
for i in range(1,6):
result += f(i)
print(result)
执行程序后,变量 result 的值是()
A.31 B.32 C.63 D.64
答案:A
解析:f(1)=1,f(2)=2
f(3)=f(2)+2*f(1)=2+2*1=4
f(4)=f(3)+2*f(2)=4+2*2=8
f(5)=f(4)+2*f(3)=8+2*4=16
result=1+2+4+8+16=31。
考向2 追踪递归调用栈,局部变量变化(难点)
例1(诸暨市 2024‑2025 学年高三 5 月适应性考试 第 11 题)
def dfs(n):
print(n,end="-")
if n==1:
return
dfs(n-1)
print(n,end="-")
dfs(3)
程序运行后的输出是()
A.3‑2‑1‑2‑3‑ B.3‑2‑1‑ C.1‑2‑3‑2‑1‑ D.3‑2‑1‑1‑2‑3‑
答案:A
【解析】
调用顺序:dfs(3)打印3- →dfs(2)打印2‑→dfs(1)打印1‑,触发 return;
回代:回到 dfs (2) 打印2‑;回到 dfs (3) 打印3‑。
完整输出:3‑2‑1‑2‑3‑。
考向3 递归代码填空(非选择题)
例1 (Z20 名校联盟 2024 届高三第三次联考 第 13 题节选)
猴子吃桃问题:第 7 天剩余 1 颗桃子;每一天桃子数量 =(后一天桃子数 + 1)*2。完成递归函数。
def peach(day):
if day ==7:
return 1
else:
return ____________
print(peach(1))
横线处填写:________
答案:(peach(day+1)+1)*2
【解析】递归向 day 增大方向推进;基线条件day=7返回1,根据递推公式书写返回表达式。
考点四 时间复杂度的初步估算
知识点1 大O表示法
时间复杂度描述:当输入规模n变大时,程序执行时间增长趋势;忽略常数、低阶项、系数,只保留最高阶项。
复杂度阶
典型场景
O(1)常量阶
简单顺序语句,固定次数执行,与n无关
O(log₂n)对数阶
对分查找,每次问题规模折半
O(n)线性阶
单层循环,循环n次
O(n²)平方阶
双层嵌套循环
示例:
递归时间复杂度简单判断:
斐波那契递归def fib(n): return fib(n1)+fib(n2),时间复杂度O(2ⁿ),效率远低于迭代O(n)版本。
考●向●破●译
考向1 选择题判断时间复杂度
例1 (七彩阳光 2025 年高三 11 月测试 第 8 题)
下列程序段,时间复杂度为O(n)的是()
A.
s=0
for i in range(n):
s += i
B.
i=n
while i>0:
i = i//2
C.
for i in range(n):
for j in range(n):
print(i,j)
D.
print(20*100)
答案:B
【解析】 A 单层循环,O(n); B 循环变量 i 每次折半,O(n)正确; C 双层嵌套循环,O(); D 语句执行次数固定,O(1)。
考向2 结合算法特征辨析复杂度阶
例1(2026 届宁波市高三二模 第 8 题)
关于算法时间复杂度,下列叙述正确的是()
A.时间复杂度O()的算法一定比O(n)运行时间短
B.对分查找算法时间复杂度为O(n)
C.双层for循环嵌套,一般情况下时间复杂度为O()
D.大O记法中O(2n)等价于O(2)
答案:C
【解析】
A:n 足够大时,O()耗时远大于O(n);
B:对分查找时间复杂度O(n);
C:双层嵌套循环一般为O(),正确;
D:大O忽略常数系数,O(2n)等价O(n)。
真题溯源·考向感知
——溯源真题逻辑,感知高考考向
1. (选考真题・2023 年浙江 6 月信息技术选考 第 10 题)
定义如下函数:
def f(a,s):
if a>=s:
return a
else:
return f(a+1,s-a)
执行语句 k = f (6,21) 后,k 的值为()
A.6 B.7 C.8 D.9
【参考答案与解析】
答案:C
解析: 本题考查递归算法及自定义函数知识。观察自定义函数 f (a,s) 可知:当参数 a≥s 时(即递归 结束条件),返回值 a;否则递归调用 f (a+1,s-a)。
模拟计算:
f (6,21),a=6<21 →调用 f (7,15)
f (7,15),a=7<15 →调用 f (8,8)
f (8,8),满足 a>=s,返回 8。故 k=8。
2.(选考真题・2025 年浙江 1 月信息技术选考 第 11 题)
对于任意非空字符串 s,甲、乙程序段输出结果相同,则乙程序段加框处的正确代码为()
甲程序段:
def f(s,t):
if t>=len(s)-2:
return s[t]
return f(s,t+2)+s[t]
print(f(s0,0))
乙程序段:
r=""
n=len(s)
for i in range(0,n,2):
▲
print(r)
A. r=s[n-i]+r
B. r=r+s[n-i-1]
C. r=r+s[i]
D. r=s[i]+r
【参考答案与解析】
答案:D
解析:
递归函数 f (s,t),t 从 0 开始,每次 + 2,返回f(s,t+2)+s[t],是先递归后面字符,再拼接当前s [t]。
例如 s0="abcde",递归执行顺序:先处理 t=2,再 t=0;输出:"eca"。
循环 i 取 0,2,4,执r=s[i]+r,实现从后往前拼接隔位字符,和递归输出结果一致。
2 / 3
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$