Python递归函数学习:列表反转递归实现无法返回out值问题
问题原因
代码运行无输出、返回值异常是三个逻辑错误共同导致的:
- 递归链路缺少返回传递:非终止分支中仅调用了
recFn(ctr+1, out),没有对递归调用结果加return。只有最内层触发终止条件的递归层会返回计算后的out,上层递归拿到内层返回值后直接丢弃,结果根本传不到最外层调用处。 - 递归终止条件漏处理元素:当前逻辑在
ctr == len(inp)-1时就直接返回out,但列表最后一个元素(示例中的102)还没被拼入结果列表,就算返回链路通畅,输出结果也会缺失元素。 - 最外层未处理函数返回值:全局作用域执行
recFn(0, out)后,既没有变量接收返回结果,也没有打印逻辑,就算函数正确算出了结果,控制台也不会有任何输出。
修正后代码
# 使用递归实现列表反转 # 示例输入 [1,'yes', 8, 'pipe', 102] 预期输出 [102, 'pipe', 8, 'yes', 1] inp = [1,'yes', 8, 'pipe', 102] def recFn(ctr, out): # 遍历完所有索引时终止,返回最终结果 if ctr == len(inp): return out out = [inp[ctr]] + out # 逐层返回递归计算结果 return recFn(ctr + 1, out) # 接收返回值并打印 res = recFn(0, []) print(res)
运行上述代码即可得到预期的反转列表。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

