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

标签 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) 不会遍历数组的所有元素并进行比较。

希望大家能帮上忙!

最佳答案

这是一种方法:

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,然后检查其余是否包含元素).

关于java - 计算数组中不同元素数量的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56504309/

相关文章:

Python:如何按列遍历列表列表,就好像它是一个普通的二维数组(矩阵)一样?

algorithm - 从 101 到 10^60 的 "jumping"数字的数量?

java - 如何递归解压缩java中的给定字符串?

java - 可用蓝牙设备列表

java - 如何根据 switch case 中的情况实现不同的返回类型

java - Spring 根据需要重新加载应用程序上下文

java - 递归(完成)

java - 如何在 Java 中生成高斯噪声?

检查线性和为零的算法

java - 递归列出Java中的文件