使用递归计算数组中给定整数的出现次数

Count occurrences of a given integer in an array using recursion

在不使用循环的情况下,我尝试使用递归计算给定整数在数组中的次数。我一直收到 Whosebug 错误,我不知道为什么。

public static int countOccurrences(int[] arr, int n) {
    if (arr.length == 0) {
        return 0;
    }
    if (arr[0] == n) {
        return 1 + countOccurrences(arr, n - 1);
    }
    return countOccurrences(arr, n - 1);
}

}

上述代码的问题在于,永远不会满足基本条件,因为您永远不会尝试减少数组的长度。要跟踪遍历的长度,您可以使用从头到尾(或从头到尾您选择的)的变量。假设 num 是您要计算的值。然后您可以将代码更改为这样:

public class CountFrequency {
        
                public static void main(String[] args) {
                    int A[] = { 1, 2, 3, 4, 5, 5 };
                    int count = countOccurences(A, 5);
                    System.out.println(count);
                }
            
                private static int countOccurences(int[] arr, int num) {
                    return helper(arr, num, arr.length - 1);
            
                }
            
                private static int helper(int[] arr, int num, int i) {
                    if (i == -1) {
                        return 0;
                    }
                    if (arr[i] == num)
                        return 1 + helper(arr, num, i - 1);
                    else
                        return helper(arr, num, i - 1);
                }
      }

输出为

2

如果只能使用两个参数,那么试试:

    public static int countOccurrences(int[] arr, int n) {
        if (arr.length == 0) {
            return 0;
        }
        if (arr[0] == n) {
            return 1 + countOccurrences(Arrays.copyOfRange(arr, 1, arr.length), n);
        }
        return countOccurrences(Arrays.copyOfRange(arr, 1, arr.length), n);
    }