使用递归Java在列表中查找最大数量

时间:2015-03-28 20:09:21

标签: java recursion arraylist

public static int counter = 0 ;
public static int max = 0 ;

public static final int findMaxRecursively(List<Integer> numbers) {
   if (numbers.get(counter) > max){
        max = numbers.get(counter);
        counter++;
   }

   if (counter == numbers.size() - 1){
        return max;
   }

  counter++;
  return findMaxRecursively(numbers);
}

我有一项作业要求我使用递归找到列表数字中的最大数字。

上面的代码抛出了一个索引异常,我认为该异常是在我无法访问的main中捕获的。

我的代码/逻辑出了什么问题?

修改

感谢您的回复。

我继续前进并移除了第一个计数器,我明白我在那里打破了什么,但仍然不允许我找到最大数量。

这是作业:

/*
 * findMaxRecursively
 *
 * Takes a list of numbers and finds the largest among them
 * using recursive calls.
 *
 * @param numbers a list of numbers, can be odd or even numbered
 * @return the largest number in the list
 *
 * Hint: your base case may be a comparison of 2 numbers
 */

我通过执行以下操作正确执行递归:

return finMaxRecursively(numbers):

2 个答案:

答案 0 :(得分:1)

在方法结束之前,我们说计数器是size - 2counter++使其成为size - 1。然后在下一次调用开始时,您会发现size - 1的索引具有最大的数字。因此,您将其设置为最大值并再次调用count++ 现在count等于size,因此if案例并没有抓住它。下次您将尝试访问和索引不允许的内容(>= numbers.size())我建议删除第一个counter++,因为它不需要。

答案 1 :(得分:0)

如果要使用递归查找数组中存在的最大值,请使用如下所示。

public static int findMax(int[] a, int index){
    if (index > 0) {
        return Math.max(a[index], findMax(a, index-1))
    } 

   else {
        return a[0];
    }
}

专门针对ArrayList,您可以使用以下方法

public static final int findMaxRecursively(List<Integer> numbers) 
{
     if(numbers.size() == 1)
         return numbers.get(0);

     int bottom = findMaxRecursively(numbers.subList(0,numbers.size()/2));

     int top = findMaxRecursively(numbers.subList(numbers.size()/2,numbers.size()));

     return top>bottom?top:bottom;
}

另请查看Find maximum value in an array by recursion