“掌握递归三板斧,轻松拿下2026年9月Python四级考试!
亲爱的同学们,我是老马。很多同学私信问我:“递归到底怎么学?为什么一遇到递归题就卡壳?”今天,我就用两道最新真题——回文单词和比岁数问题,手把手带大家拆解递归的底层逻辑,让你彻底告别“一看就会,一写就废”。
递归不是什么玄学,它就是一种函数调用自身的编程技巧。就像俄罗斯套娃,打开一层里面还有一层,直到最小的那个娃娃不能再打开为止。
递归函数必须包含两个部分:
| 基准条件 | ||
| 递归关系 |
“口诀:先找基准,再写递归,参数递减,终会回头。
某同学收集了很多单词,不同的单词之间用'-'拼接在一起,如'refer-level-face-',他发现有些单词如level,从左往右读和从右往左读该单词是一样的,称之为回文单词。他想统计他收集的单词中有多少个回文单词。
步骤如下:
(1)首先将单词按'-'分割出所有单词,
(2)统计这些单词中回文单词的数量。
编写的Python代码如下,完善划线处的代码。
defrevstr(str):if len(str) == 1:return _____①_____else:return _____②_____word = 'refer-level-face-'wordlst = []s = ''for t in word:if t != '-': _____③_____else: wordlst.append(s) s = ''c = 0for w in wordlst: rev = revstr(w)if _____④_____: c += 1print('对称的字符串个数有', c)递归实现反转字符串:
defrevstr(s):if len(s) == 1: # ① 基准条件:只剩一个字符return s # 直接返回该字符else:return revstr(s[1:]) + s[0] # ② 递归:反转剩余部分 + 首字符放到末尾解题三步走:
- 就把前面累积的单词加入列表。revstr 得到反转结果,与原单词比较。核心技巧:
revstr(s) = revstr(s[1:]) + s[0]有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。请问第五个人多大?
请运用递归算法完成以下代码。
defage(n):if _____①_____: c = 10else: c = _____②_____return cprint(age(_____③_____))递归实现:
defage(n):if n == 1: # ① 基准条件:第一个人10岁return10else:return age(n-1) + 2# ② 递归:前一个人的年龄 + 2解题三步走:
age(n) = age(n-1) + 2,age(1) = 10age(5) 输出18核心技巧:
无论题目怎么变,只要遵循以下步骤,都能迎刃而解:
revstr(s) 输入字符串,输出反转后的字符串;age(n) 输入序号,输出年龄。n==1、len(s)==1、空列表等。f(n) = f(n-1) + 常数(年龄问题)f(n) = f(n-1) + f(n-2)(斐波那契)f(n) = g(f(n-1))(反转字符串)if...return | ||
n==1,漏了 n==0 | ||
age(n-1) + 2age(n+1) - 2 |
题目:用递归计算第n个三角形数(1, 3, 6, 10, …),即 T(n) = T(n-1) + n,T(1)=1。
deftriangle(n):if n == 1:return _____①_____else:return _____②_____print(triangle(5)) # 应输出15答案:① 1 ② triangle(n-1) + n
解析:基准条件 n=1 返回1,递归关系 T(n)=T(n-1)+n。
递归并不神秘,它只是把复杂问题分解成一个个简单子问题的思维方式。记住老马的“四步法”:定功能、找基准、建关系、验收敛,再难的递归题也能轻松破解。
备考路上,如果你有任何疑问,欢迎在评论区留言。我会挑选典型问题在下期文章中解答。祝大家2026年9月考试顺利,一次过关!
青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
