有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

希望你们能帮忙


共 (1) 个答案

  1. # 1 楼答案

    这里有一种方法:

    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,这取决于最后一个元素是否在数组的其余部分,加上数组其余部分中的任何重复数(“最后一个元素”表示array[size - 1],而“其余”表示用size - 1调用函数。)
    • 为了确定一个元素是否在一个数组中,我也使用了一种递归方法,具有类似的想法(检查最后一个元素是否为elem,然后检查其余元素是否包含elem