Python中如何通过递归将字符串转为字符列表并修正嵌套返回问题
问题原因
你现有代码的问题在于:每次递归调用explode(S[1:])返回的是一个列表,而append()方法会把整个列表作为单个元素添加到res中,最终就会产生嵌套的多层列表结构,和你预期的扁平列表不符。
修正后的代码
把append替换为extend即可,extend会把递归返回的列表里的所有元素逐个追加到当前res中:
def explode(S): res = [] res.append(S[0]) if len(S)==1: return res else: res.extend(explode(S[1:])) return res
也可以写成更简洁的版本:
def explode(S): if len(S) == 1: return [S[0]] return [S[0]] + explode(S[1:])
验证效果
调用explode('star'),输出结果为['s', 't', 'a', 'r'],符合预期。
入门递归练习案例
写递归的核心是先明确两个点:终止条件(最小规模的输入对应的返回结果)、问题拆分规则(把当前输入拆成更小规模的同类问题,调用自身后合并结果)。你可以从以下简单案例入手练习:
- 阶乘计算:输入正整数n,返回n的阶乘。终止条件为n=0时返回1,拆分规则为n * 递归计算(n-1)的阶乘
- 列表求和:输入全是数字的列表,返回所有元素的总和。终止条件为列表为空时返回0,拆分规则为列表第一个元素 + 递归计算剩余元素的和
- 字符串反转:输入字符串,返回反转后的结果。终止条件为字符串长度≤1时返回自身,拆分规则为字符串最后一个字符 + 递归反转剩余子串的结果
- 十进制转二进制:输入正整数,返回对应的二进制字符串。终止条件为n≤1时返回str(n),拆分规则为递归转换(n//2)的结果 + str(n%2)
内容的提问来源于stack exchange,提问作者Swayam Shah
相关产品推荐
相关产品推荐

