递归地在并行数组上找到值

时间:2018-11-29 04:38:30

标签: java recursion

我需要编写一个递归方法,该方法需要两个并行数组和要查找的单词,查找指定的单词,并在每次索引与另一个数组匹配时求和。例如:

array1 = "Toyota", "Honda", "Honda", "Toyota", "Toyota", ......n

array2 = 22500, 18000, 29000, 22500, 32000, ....... n

如果我说我需要寻找单词"Toyota",那么只要找到索引,它就应该对第二个数组的值求和。在这种情况下,其总和为22500+22500+32000

如何制作递归方法,使其采用适当的参数并进行递归计算。我将使用硬编码值。

这是我到目前为止所拥有的。我很确定我的递归方法需要更多参数,但是我会看看是否有人可以帮助我

static int printRecursively(int A[], int N) {
        if(N <= 0) {

            return 0;

        }

        return (printRecursively(A, N - 1) + A[N -1]);
    }

}

3 个答案:

答案 0 :(得分:1)

我认为您当前的数据结构不适用于此问题。相反,我建议使用汽车到值的哈希图:

Map<String, List<Integer>> map = new HashMap<>();
List<Integer> values = Arrays.asList(22500, 22500, 32000);
map.put("Toyota", values);
values = Arrays.asList(18000, 29000);
map.put("Honda", values);

然后,要获取给定汽车的值总和,我们可以轻松地使用流:

int sum = map.get("Toyota").stream().reduce(0, (a, b) -> a + b);

通常来说,一种解决方法是将汽车作为钥匙的数据表示出来,并将值指向该钥匙所指向的数据。

答案 1 :(得分:1)

从位置0处的“游标”开始。然后返回该位置处的数字之和,以及从同一方法调用(其光标值为cursor+1)返回的任何和。如果cursor+1处没有任何内容,则表示您已到达数组末尾,在这种情况下,只需返回该位置的数字即可。

public static void main(String[] args) {
    String arr1[] = new String[]{"Toyota", "Honda", "Honda", "Toyota", "Toyota"};
    int arr2[] = new int[]{22500, 18000, 29000, 22500, 32000};

    System.out.println(getSum(arr1, arr2, "Toyota", 0));
}

private static int getSum(String arr1[], int arr2[], String word, int cursor) {
    if (cursor == arr1.length - 1) return arr1[arr1.length - 1].equals(word) ? arr2[arr2.length - 1] : 0;
    return arr1[cursor].equals(word)
            ? arr2[cursor] + getSum(arr1, arr2, word, cursor + 1)
            : getSum(arr1, arr2, word, cursor + 1);
}

输出

77000

答案 2 :(得分:0)

以下类似内容可能适合您的需求

public static int recursiveSum(String search, String[] names, int[] values, int start) {
    // Check that the two arrays are of the same length
    // And that start does not exceed the bounds of either
    if((names.length != values.length) || start > names.length)
        return 0;

    // If the value at the 'start' of the array is the one we're looking for
    if(names[start].equals(search)) {
        return values[start] + recursiveSum(search, names, values, start + 1);
    } else {
        // Otherwise just skip onto the next value of the arrays
        return recursiveSum(search, names, values, start + 1);
    }
}


recursiveSum("Toyota", names, values, 0)