在递归方法中,查找数组中最大值的索引

时间:2015-04-17 19:29:30

标签: java arrays recursion

//如标题所示,我需要在int //数组中找到最大值的索引,所有这些都需要在一个方法中完成,这就是我的帮助器//方法到目前为止的样子< / p>

它只返回数组中的最后一个索引我可以轻松返回最大值,但我无法弄清楚如何返回该值的索引

//这是辅助方法

private int recursiveGetIndexOfLargest( int[] list, int count )
{
    int index;  
    int[] y = list;
    int temp = count - 1;
    if( count > 0 )
    {
        index = Math.max( list[list.length - 1], list[temp] );
        for(int x = 0; x < y.length; x++)
        {
            if(y[x] == index)
            {
                return x;
            }
        }
        return recursiveGetIndexOfLargest(list, temp);
    }

    else
    {
        return -1;//empty list
    }        
}

这是调用帮助程序的方法

public int getIndexOfLargest()
{
    return recursiveGetIndexOfLargest(list, count);
}

3 个答案:

答案 0 :(得分:1)

试试这个:

 int recursiveGetIndexOfLargest(int[] list, int count)
 {
   if (count == list.length - 1) return count;

   int index = recursiveGetIndexOfLargest(list, count + 1);
   return list[count] > list[index] ? count : index;
 }

 int[] arr = {1, 5, 2, 3, 0};
 System.out.println(recursiveGetIndexOfLargest(arr, 0));

答案 1 :(得分:0)

int findLargestIndex(int[] array, int currentPos, int currentLargestIndex)
{
  if(currentPos == array.length) 
      return currentLargestIndex;
  if(array[currentPost] > array[currentLargestIndex]
      return findLargestIndex(array,currentPos+1, currentPos);
  else
      return findLargestIndex(array,currentPos+1, currentLargestIndex);
}

它实际上是递归完成的O(n)循环。 你这样开始:

int result = findLargestIndex(array,0,0);

这会有效,但会改变数组。

void findLargestIndex(int[] array, int currentPos)
{
     if(currentPos == array.size()) return;
     array[0] = (array[currentPos] < array[currenPos + 1] ? currentPos + 1 : currentPos;
     findLargestIndex(int[] array, currentPos + 1);
}

最大的索引将存储在数组[0](这会改变数组)。

您只需启动该功能:

 findLargestIndex(array,0);

答案 2 :(得分:0)

谢谢tomse !!!!!!!!

参数count实际上是数组的大小,所以我稍微改了一下

private int recursiveGetIndexOfLargest( int[] list, int count )
{
    int index;
    int temp = count - 1;
    if( temp == 0 )
    {
        return temp;
    }

    else
    {
        index = recursiveGetIndexOfLargest(list, temp);
        return list[temp] > list[index] ? temp : index;
    }
}

现在它工作了,我浪费了几个小时失败