如何使用递归查找数组中最大元素的位置?

时间:2014-04-10 16:24:37

标签: java

给定一个数组列表,列表中元素的数量使用递归找到最大元素的位置。

到目前为止,我能够找到最大的元素,但我需要该元素在数组上的位置而不是实际值。

private int getLargestElementLoca(int[] list, int count)
{
int largestValue;
if(count == 1){
return 0;
}

int tempMax = getLargestElementLoca(list,count-1);
largestValue = Math.max(list[count-1],tempMax);


return largestValue;
} 

3 个答案:

答案 0 :(得分:0)

一个想法可能是将数组递归分成两部分,直到只剩下2或1个元素。找到两个数字或一个最大值很简单并且返回它。然后比较两个返回值并返回最大值

答案 1 :(得分:0)

递归很简单,但你应该知道迭代地做这件事:

private int getMaxLocation(int[] array) {
    int maxpos = 0;
    int max = Integer.MIN_VALUE;
    for (int i = 0; i < array.length; i++) {
        if (array[i] > max) {
            max = array[i];
            maxpos = i;
        }
    }
    return maxpos;
}

如果您是通过递归来完成此操作,则需要跟踪其中的一些变量:

private int getMaxLocation(int[] array, int pos, int max, int maxpos) {
    if (pos >= array.length || pos < 0) {
        return maxpos;
    } else {
        int current = array[pos];
        if (current > max) {
            max = current;
            maxpos = pos;
        }
        return getMaxLocation(array, ++pos, max, maxpos);
    }
}

//calling this
int max = getMaxLocation(yourArray, 0, Integer.MIN_VALUE, 0);

答案 2 :(得分:0)

您正走在正确的轨道上,但您只需要进行一些调整。我不会为你编写代码,但这里有一些线索。

如果希望函数返回索引而不是最大值,则需要更改计算返回值的方式以递归方式使用它。

private int getLargestElementLoca(int[] list, int count)
{
int largestValue;
if(count == 1){
return 0;
}

如果只有一个元素要查看,即list[0],则list[0]将是最大值,0将是其索引。所以返回0在这里是正确的。

int tempMax = getLargestElementLoca(list,count-1);

您已重新定义getLargestElementLoca,以便返回索引,而不是最大值。这同样适用于您的递归调用,因此tempMax将成为索引而不是值。这意味着您无法将其直接传递到Math.max。有些调整是必要的,但请继续阅读。

largestValue = Math.max(list[count-1],tempMax);

Math.max会返回最大值,但这并不是您想要的。您有两个索引count-1和其他索引,并且您想要计算较大值的索引。您无法使用Math.max执行此操作,但可以使用if语句或条件运算符a ? b : c。重命名变量也会有所帮助,因为它不再包含最大值。