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

Java无循环无导入实现元素计数及奇偶判断的递归方案求解

问题背景

需要实现功能:统计指定数字在整数数组中的出现次数,判断次数的奇偶性,要求不使用任何导入包、不使用循环,仅通过递归实现。
示例输入:(3, new int[]{3,3,4,5,3,3,2,1}),预期返回true(3出现4次,为偶数)

原有代码错误点
  • 变量名不匹配:方法入参为num、numarr,代码中错误使用了未定义的a、n变量
  • 状态无法传递:索引i、计数器counter定义在方法内部,每次递归都会被重置为0,无法继承上一层的计算结果
  • 返回值类型错误:方法声明返回int,实际逻辑需要返回boolean类型的奇偶判断结果
  • 终止条件逻辑错误:错误将数组元素值和数组长度做对比,无法正确判断遍历结束的状态
正确实现方案

方案1:先递归计数再判断奇偶(符合原有思路)

不需要额外定义全局变量,通过递归参数传递当前遍历的下标,递归回溯时累加计数即可:

public class NumberCheck {
    public static boolean evenNumberOf(int target, int[] arr) {
        // 边界处理:空数组时目标数字出现次数为0,属于偶数
        if (arr == null || arr.length == 0) {
            return true;
        }
        // 递归计算总出现次数,判断是否为偶数
        return countTarget(target, arr, 0) % 2 == 0;
    }

    // 私有递归方法:返回从index下标开始到数组末尾,target的出现次数
    private static int countTarget(int target, int[] arr, int index) {
        // 终止条件:下标超出数组范围,返回0
        if (index == arr.length) {
            return 0;
        }
        // 当前元素匹配则加1,否则加0,再加上后续下标的计数结果
        return (arr[index] == target ? 1 : 0) + countTarget(target, arr, index + 1);
    }

    // 测试入口
    public static void main(String[] args) {
        // 示例输入测试
        System.out.println(evenNumberOf(3, new int[]{3,3,4,5,3,3,2,1})); // 输出true
    }
}

方案2:直接传递奇偶状态(更高效,无需累计全量计数)

因为只需要判断奇偶,不需要知道具体出现次数,每匹配到一次目标数字直接翻转奇偶状态即可:

public class NumberCheck {
    public static boolean evenNumberOf(int target, int[] arr) {
        if (arr == null || arr.length == 0) {
            return true;
        }
        return checkParity(target, arr, 0, true);
    }

    // 私有递归方法:isEven表示当前累计出现次数是否为偶数
    private static boolean checkParity(int target, int[] arr, int index, boolean isEven) {
        if (index == arr.length) {
            return isEven;
        }
        // 匹配到目标数字,翻转奇偶状态
        if (arr[index] == target) {
            isEven = !isEven;
        }
        return checkParity(target, arr, index + 1, isEven);
    }

    public static void main(String[] args) {
        System.out.println(evenNumberOf(3, new int[]{3,3,4,5,3,3,2,1})); // 输出true
    }
}

内容的提问来源于stack exchange,提问作者KastratenKarl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:45:07