计算数组中元素数量的递归方法

时间:2019-06-08 07:12:08

标签: java algorithm recursion

假设我有以下数组: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)不能遍历数组的所有元素并进行比较。

希望你们能帮忙!

2 个答案:

答案 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。
  • 对于递归情况,现在我们返回1或0,这取决于最后一个元素是否在数组的其余部分中,以及数组其余部分中重复项的数量(“最后一个元素”的意思是{{1 }}和“其余”的意思是用array[size - 1]调用该函数。)
  • 要确定某个元素是否在数组中,我也使用了一种具有类似想法的递归方法(检查最后一个元素是否为size - 1,然后检查其余元素是否包含elem) 。