假设我有以下数组:ARR = {5,7,3,3,7,5} 并且我也有大小(在此示例中= 6),因此递归函数应返回3。
这是函数/方法的声明:
int f(arr, size);
我尝试过这个事情:
count = 0;
if(size == 1)
return 1;
if(x[i] != f(arr, size-1)
count++;
return count;
但是它不起作用,因为f(arr,size-1)不能遍历数组的所有元素并进行比较。
希望你们能帮忙!
答案 0 :(得分:0)
我在不使用递归函数的情况下编写了该程序。希望这能满足您的期望。
int function(int arr[],int size){
int count =0;
for (int i = 0; i < size; i++){
for (int j = 0; j < i; j++)
if (arr[i] == arr[j]) {
count++;
break;
}
}
return count;
}
答案 1 :(得分:0)
这里是一种方法:
private static int f(int[] arr, int size) {
if (size <= 1) return 0; // there can't be duplicates if there are not even 2 elements!
return f(arr, size - 1) + (inArray(arr, size - 1, arr[size - 1]) ? 1 : 0);
}
private static boolean inArray(int[] arr, int size, int elem) {
if (size == 0) return false;
return arr[size - 1] == elem || inArray(arr, size - 1, elem);
}
基本上,逻辑是这样的:
size
表示arr
中我们实际上关心的前N个元素。size
小于2,我们知道不能重复,因此返回0。array[size - 1]
调用该函数。)size - 1
,然后检查其余元素是否包含elem
) 。