如何用递归统计数组末尾连续零的个数

本文介绍一种简洁、健壮的递归方法,用于统计整型数组末尾连续零的个数,正确处理空数组、全零数组、无零数组等边界情况,并避免原实现中的逻辑混乱与索引越界风险。

本文介绍一种简洁、健壮的递归方法,用于统计整型数组末尾连续零的个数,正确处理空数组、全零数组、无零数组等边界情况,并避免原实现中的逻辑混乱与索引越界风险。

在算法设计中,递归的核心在于明确定义基线条件(base case)递归关系(recursive step)。针对“统计数组末尾连续零个数”这一问题,最自然的思路是:从数组最后一个元素开始向前扫描,一旦遇到非零元素即停止;若遍历至数组开头仍全为零,则返回数组长度。

以下是推荐的递归实现:

public static int countTrailingZeros(int[] arr) {
    if (arr == null || arr.length == 0) {
        return 0;
    }
    return countTrailingZeros(arr, arr.length - 1);
}

private static int countTrailingZeros(int[] arr, int pos) {
    // 基线条件:越界或当前元素非零 → 不再计数
    if (pos < 0 || arr[pos] != 0) {
        return 0;
    }
    // 递归步骤:当前为0,继续向前检查,总数 = 1 + 剩余部分的尾零数
    return 1 + countTrailingZeros(arr, pos - 1);
}

关键设计说明:

⚠️ 常见错误规避:

? 测试用例验证:

System.out.println(countTrailingZeros(new int[]{1,2,3}));     // 0  
System.out.println(countTrailingZeros(new int[]{1,0,0,0}));     // 3  
System.out.println(countTrailingZeros(new int[]{0,0,0}));       // 3  
System.out.println(countTrailingZeros(new int[]{}));            // 0  
System.out.println(countTrailingZeros(null));                   // 0  

该方案结构清晰、语义明确,符合递归思维范式——“当前步做什么 + 剩余问题交给子调用”,既保证正确性,也具备良好的可读性与可扩展性。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。