如何将生成累加和列表的factorials函数改写为递归实现?
递归实现累加和列表的方法
首先明确递归的核心逻辑:要生成1到x的累加和列表,我们可以先递归生成1到x-1的累加和列表,再把1到x的累加和(也就是sum(x)的结果)加到这个列表的末尾。递归的终止条件很简单——当x=1时,直接返回只包含sum(1)的列表[1]。
先确认你已经有可用的sum(x)函数,比如:
def sum(x): # 计算1到x的累加和 return x * (x + 1) // 2
接下来是两种递归实现的写法:
写法一:基于列表追加
def factorials(x): # 终止条件:x=1时返回基础列表 if x == 1: return [sum(1)] # 先递归获取前x-1项的列表 previous_list = factorials(x - 1) # 把当前x对应的累加和追加到列表末尾 previous_list.append(sum(x)) return previous_list
写法二:基于列表拼接(更简洁)
def factorials(x): if x == 1: return [1] # 直接把递归得到的子列表和当前项的列表拼接 return factorials(x - 1) + [sum(x)]
调用factorials(10)就能得到你要的结果:[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]。
本质上递归是把大问题拆成小问题解决,不需要在递归过程中维护全局列表,每次递归调用都会返回对应子问题的完整结果,我们只需要把当前项的结果和子问题结果组合起来就行。
内容的提问来源于stack exchange,提问作者Enrique Ferreira
相关产品推荐
相关产品推荐

