递归检查列表相邻元素和为12倍数及剩余元素和奇偶性问题
解决递归检查相邻元素和为12倍数且剩余元素和为奇数的问题
看起来你已经摸到了递归思路的门,但目前的实现只盯着列表开头的相邻元素对,没覆盖到中间位置的情况对吧?咱们一步步把这个问题捋顺修复。
问题拆解
先再明确下你的核心需求:
- 遍历列表里所有相邻元素对,找有没有哪一对的和是12的倍数
- 一旦找到符合条件的相邻对,就计算移除这两个元素后剩余所有元素的总和,判断是否为奇数
- 只要存在任意一对满足上述两个条件,就返回
true;否则返回false
像你提到的[10,7,5,5],中间的7+5=12符合第一个条件,移除后剩下[10,5]的和是15(奇数),理应返回true,但你的代码没处理后续的相邻对,所以出了问题。
递归实现的正确思路
递归的关键是要让每一次递归都能推进检查的进度,覆盖所有可能的相邻对:
- 基线条件:如果列表长度小于2,没有相邻元素对可以检查,直接返回
false - 递归步骤:
- 先检查当前列表的第一个相邻对(索引0和1):如果和是12的倍数,就计算剩余元素的和是否为奇数,是则直接返回
true - 如果第一个相邻对不满足,就递归检查去掉第一个元素后的子列表——这样每递归一次,就会把下一组相邻对推到“第一个相邻对”的位置,自然就能遍历所有相邻元素了
- 先检查当前列表的第一个相邻对(索引0和1):如果和是12的倍数,就计算剩余元素的和是否为奇数,是则直接返回
代码示例(以Python为例)
def check_valid_pair(lst): # 基线条件:列表长度不够2,没有相邻元素对 if len(lst) < 2: return False # 检查当前列表的第一个相邻对 current_pair_sum = lst[0] + lst[1] if current_pair_sum % 12 == 0: # 计算移除这对元素后剩余元素的和 remaining_sum = sum(lst[2:]) if remaining_sum % 2 != 0: return True # 第一个相邻对不满足,递归检查去掉第一个元素后的子列表 return check_valid_pair(lst[1:])
测试验证
咱们用你给出的案例测试下:
check_valid_pair([6,6,5]):6+6=12,剩余和为5(奇数)→ 返回true,符合预期check_valid_pair([6,5,6,1]):依次检查6+5=11(不满足)、5+6=11(不满足)、6+1=7(不满足)→ 返回false,符合预期check_valid_pair([10,7,5,5]):先检查10+7=17(不满足),递归到[7,5,5]后,7+5=12(满足),剩余和为5(奇数)→ 返回true,完美解决你的问题!
额外补充
如果你的需求里有特殊情况(比如允许重复检查同一元素?不过相邻对本身不会重叠),可以再调整逻辑,但目前的实现已经完全覆盖了你提到的所有场景。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

