Python递归查找列表最大奇数(不使用max/min)及代码问题修复
递归查找列表最大奇数问题修复方案
原代码核心Bug
- 终止逻辑错误:递归到列表只剩最后一个元素时,没有判断该元素是否为奇数就直接返回,导致全偶数列表会返回最后一个偶数,而非预期的None
- 未处理空奇数集的返回值:当子列表递归调用返回None(即子列表无奇数)时,原代码直接将当前奇数和None做大小比较,会触发类型错误或逻辑异常
- 重复递归调用:同一段逻辑里两次调用
maxOdd(L[1:]),会导致递归执行次数翻倍,性能损耗严重
修复后代码
def maxOdd(L): if not L: return None # 仅调用一次递归获取子列表的最大奇数 sub_max = maxOdd(L[1:]) # 判断当前元素是否为奇数 if L[0] % 2 == 1: # 子列表无奇数时直接返回当前奇数 if sub_max is None: return L[0] # 子列表有奇数时返回二者的更大值 return L[0] if L[0] > sub_max else sub_max # 当前元素非奇数,直接返回子列表的计算结果 else: return sub_max
验证结果
使用你提供的测试用例运行,所有断言均可通过,正常输出Testing maxOdd()...Passed!
内容的提问来源于stack exchange,提问作者Moustafa Abada
相关产品推荐
相关产品推荐

