You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归统计数组中指定数值的出现次数并判断次数是否为偶数

问题分析

你当前编写的代码存在以下核心问题,完全不符合需求逻辑:

  • 错误将入参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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:15:07