如何递归统计数组中指定数值的出现次数并判断次数是否为偶数
问题分析
你当前编写的代码存在以下核心问题,完全不符合需求逻辑:
- 错误将入参n当作数组下标使用,判断逻辑
arr[n] == n和「统计数值n在数组中的出现次数」的要求完全无关 - 递归逻辑混乱,没有遍历数组所有元素的逻辑,也没有计数逻辑
- 未处理数组为空的边界场景
正确实现
迭代实现(推荐,性能更好、无栈溢出风险)
public static boolean evenNumberOf(int n, int[] arr) { // 数组为空直接返回false if (arr == null || arr.length == 0) { return false; } int occurCount = 0; // 遍历数组统计数值n的出现次数 for (int num : arr) { if (num == n) { occurCount++; } } // 次数为偶数返回true,奇数返回false return occurCount % 2 == 0; }
递归实现(如果你需要用递归写法)
public static boolean evenNumberOf(int n, int[] arr) { // 边界处理:数组为空直接返回false if (arr == null || arr.length == 0) { return false; } // 递归辅助方法:入参为当前遍历下标、当前次数是否为偶数的状态 return countHelper(n, arr, 0, true); } private static boolean countHelper(int target, int[] arr, int currentIndex, boolean isEven) { // 遍历完所有元素,直接返回当前奇偶状态 if (currentIndex == arr.length) { return isEven; } // 当前元素等于目标值,翻转奇偶状态 if (arr[currentIndex] == target) { isEven = !isEven; } // 继续遍历下一个元素 return countHelper(target, arr, currentIndex + 1, isEven); }
验证示例
- 入参n=2,arr=[2,2,3]:出现2次(偶数),返回true
- 入参n=5,arr=[1,5,6,5,5]:出现3次(奇数),返回false
- 入参n=1,arr=[]:返回false
- 入参n=4,arr=[1,2,3]:出现0次(偶数),返回true
内容的提问来源于stack exchange,提问作者user17543363
相关产品推荐
相关产品推荐

