使用递归计算数组中给定整数的出现次数
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);
}
在不使用循环的情况下,我尝试使用递归计算给定整数在数组中的次数。我一直收到 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);
}