Python递归函数统计两列表同索引符合条件元素次数返回值恒为0问题
问题诱因
- 递归逻辑提前终止:对第一个索引的元素完成比较后,无论结果是大于等于还是小于,都直接调用了
return返回当前单次的比较结果,后续递归遍历剩余元素的代码永远不会被执行,函数只能返回第一个位置的比较值,自然无法累计符合条件的总次数。 - 无递归终止边界:没有处理列表切片为空的退出条件,当递归到列表长度为0时,访问
list1[0]会触发IndexError索引越界错误。 - 语法错误:最后一行
print函数缺少闭合右括号,代码无法正常运行。
修复方案
调整逻辑为「当前索引比较结果 + 剩余列表递归统计的结果」,同时补充空列表的递归终止条件,修正后的代码如下:
def compare(list1, list2): """统计list1中元素小于list2同索引元素的总次数""" # 递归终止:任意列表为空时停止,返回0 if not list1 or not list2: return 0 # 累计当前结果和后续递归的结果 current_count = 1 if list1[0] < list2[0] else 0 return current_count + compare(list1[1:], list2[1:]) print(compare([1,2,3],[2,1,5]))
上述代码运行测试用例compare([1,2,3],[2,1,5])的返回结果为2,符合预期。
内容的提问来源于stack exchange,提问作者person
相关产品推荐
相关产品推荐

