对于这种递归方法,我有一种无可挑剔的算法,可以找到整数ArrayList的最小值,我在伪代码中运行了几次,它应该能完美工作。
public static int findMin(ArrayList<Integer> numbers)
{
if(numbers.size() == 1)
{
return numbers.get(0);
}
else
{
if(numbers.get(0) >= numbers.get(1))
{
numbers.remove(0);
numbers.trimToSize();
findMin(numbers);
}
else
{
numbers.remove(1);
numbers.trimToSize();
findMin(numbers);
}
}
return Integer.MIN_VALUE;
它首先确定数组的大小,如果为1,则该方法应返回该元素。如果不是,它将确定前两个中的哪个较大,并删除该一个。如果它们相同,它将删除第一个。我有
return Integer.MIN_VALUE;
可以确保方法返回值。
奇怪的是我改变了事实
return numbers.get(0);
到
return numbers.get(-1);
查看是否曾经满足第一个条件,并且抛出了一个异常,如果不满足该条件则不会发生。我只是对哪里出了问题感到困惑。