我需要编写一个递归方法,该方法需要两个并行数组和要查找的单词,查找指定的单词,并在每次索引与另一个数组匹配时求和。例如:
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]);
}
}
答案 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)