Java 使用递归查找整数数组列表中的最大值

Java 使用递归查找整数数组列表中的最大值,java,recursion,arraylist,Java,Recursion,Arraylist,我没有太多关于这个。。。我的任务是创建一个递归方法,该方法将输出整数数组列表中的最大值 publicstaticintmaxvalue(arraylista) { 如果(a.isEmpty())抛出新的NoSuchElementException(“无法计算空列表的最大值”); 如果(a.size()==1){返回a.get(0);} 否则{ //不确定在这里为递归添加什么 } } 一种方法是比较前两个值,删除最小的一个值(如果相等,则删除其中一个值),并设置列表大小为1的基本大小写,如下所示:

我没有太多关于这个。。。我的任务是创建一个递归方法,该方法将输出整数数组列表中的最大值

publicstaticintmaxvalue(arraylista)
{
如果(a.isEmpty())抛出新的NoSuchElementException(“无法计算空列表的最大值”);
如果(a.size()==1){返回a.get(0);}
否则{
//不确定在这里为递归添加什么
}
}

一种方法是比较前两个值,删除最小的一个值(如果相等,则删除其中一个值),并设置列表大小为1的基本大小写,如下所示:

public static int maxValue(ArrayList<Integer> a)
    {
        if (a.isEmpty()) return -1;
        if (a.size() == 1) return a.get(0);
        if (a.get(0) <= a.get(1))
        {
            a.remove(0);
        } else
        {
            a.remove(1);
        }
        return maxValue(a);
    }
publicstaticintmaxvalue(arraylista)
{
如果(a.isEmpty())返回-1;
如果(a.size()==1)返回a.get(0);
如果(a.get(0)尝试以下方法:

import java.util.List;
import static java.util.Math.*;
import java.util.NoSuchElementException;
import static java.util.Objects.*;

public static int maxValue( List<Integer> list )
{
    if( isNull( list ) ) throw new IllegalArgumentException( "list is null." );
    if( list.isEmpty() ) throw new NoSuchElementException( "Can't compute max of empty list." );

    var size = list.size();
    var head = list.get( 0 );
    var retValue = size == 1 ? head : max( head, maxValue( list.sublist( 1, size ) ); 
    return retValue;
}
import java.util.List;
导入静态java.util.Math.*;
导入java.util.NoSuchElementException;
导入静态java.util.Objects.*;
公共静态int maxValue(列表)
{
if(isNull(list))抛出新的IllegalArgumentException(“list为null”);
if(list.isEmpty())抛出新的NoSuchElementException(“无法计算空列表的最大值”);
var size=list.size();
var head=list.get(0);
var retValue=size==1?head:max(head,maxValue(list.sublist(1,size));
返回值;
}

List.subList()
不返回(子)列表的副本,而是返回基础列表上的新视图。

如果要求允许,可以添加第二个参数n,并传递ArrayList的大小

   ...
   System.out.println(maxValue(arrlst, arrlst.size()));
   ...


public static int maxValue(ArrayList<Integer> a, int n) {
    if (n == 1)
        return a.get(0);

    return Math.max(a.get(n - 1), maxValue(a, n - 1));
}
。。。
System.out.println(maxValue(arrlst,arrlst.size());
...
公共静态int maxValue(ArrayList a,int n){
如果(n==1)
返回a.get(0);
返回Math.max(a.get(n-1),maxValue(a,n-1));
}

解决方案很糟糕,因为它会破坏输入。至少,它应该使用输入的一个副本,尽管这会使其速度变慢且内存不足。是的,我想提一提,但根据OP编写的内容(起始代码),这正是作业需要的