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):
答案 0 :(得分:1)
在方法结束之前,我们说计数器是size - 2
。 counter++
使其成为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;
}