如何用递归函数统计列表中的负数个数?代码输出异常求调试
递归统计列表负数数量的问题修复
你的代码核心问题是遇到负数时仅返回1,未递归处理剩余元素,而且count变量每次递归都会重新初始化,完全没起到累加作用。比如第一个测试用例中,遇到-1就直接返回1,不会继续统计后面的-5,所以结果只有1。
修正后的代码
def countNegatives(num_list): """Takes in a list of numbers and returns the number of negative numbers that are inside the list.""" # 基线条件:空列表无负数,返回0 if len(num_list) == 0: return 0 # 第一个元素是负数时,累加1并递归统计剩余列表 if num_list[0] < 0: return 1 + countNegatives(num_list[1:]) # 非负数时,直接递归统计剩余列表 else: return countNegatives(num_list[1:]) print(countNegatives([0, 1, -1, 3, -5, 6])) # 输出2 print(countNegatives([-1, -3, 50,-4, -5, 1])) # 输出4
关键逻辑说明
- 基线条件:当列表为空时,递归终止,返回0(没有负数可统计)。
- 负数分支:当前元素是负数时,返回
1 + 剩余列表的负数数量,实现累加计数。 - 非负数分支:当前元素非负时,直接返回剩余列表的负数数量,不增加计数。
另外,避免用list作为参数名(它是Python内置类型),这里改为num_list避免命名冲突。
内容的提问来源于stack exchange,提问作者Stephanie Miles
相关产品推荐
相关产品推荐

