Python能否使用递归实现两个数组对应元素求和并返回结果列表
问题原因及优化方案
核心错误点
- 变量名不统一:函数形参定义的是
counter,但递归逻辑里全程用的是c,运行时会直接触发NameError - 返回值结构错误:使用逗号拼接当前计算值和下一层递归结果,Python会自动将逗号分隔的值打包为元组,最终就会得到嵌套元组的结构,而非目标列表
修正后的基础版代码
def add(l1, l2, n, counter): if counter >= n: return [] # 把当前求和值放到列表开头,拼接下一层递归返回的列表,保证顺序正确 return [l1[counter] + l2[counter]] + add(l1, l2, n, counter + 1) list1 = [7,8,9] list2 = [10,11,12] print(add(list1, list2, 3, 0))
运行后输出就是预期的[17, 19, 21]。
更易用的优化版本
可以简化调用逻辑,不需要手动传入列表长度和计数器初始值,同时兼容两个列表长度不一致的场景,取较短列表的长度作为终止计算的边界:
def add(l1, l2, counter=0): if counter >= len(l1) or counter >= len(l2): return [] return [l1[counter] + l2[counter]] + add(l1, l2, counter + 1) list1 = [7,8,9] list2 = [10,11,12] print(add(list1, list2))
内容的提问来源于stack exchange,提问作者wizby_
相关产品推荐
相关产品推荐

