java - 将getLargest重写为Java中的递归方法

标签 java arrays recursion max

我正在做这项作业,但在递归编写此方法时遇到问题。 我有这种方法,它有效但不是递归的:

public static <T extends Comparable< ? super T>> T getLargest(T [] a, int low, 
              int high)
{
    if(low>high)
            throw new IllegalArgumentException();
    return Collections.max(Arrays.asList(Arrays.copyOfRange(a, low, high)));

所以从那里我转到了这个,它是它的扩展,但也不是递归的:

T[] arrCopy = (T[]) new Object[high-low];
    for(int i=low;i<high;i++){
        if(a[i].compareTo(a[i-1])>0)
            arrCopy[i]=a[i];
        else
            arrCopy[i]=a[i+1];
    }
    return arrCopy[0];

我已经研究了几个小时,但似乎没有办法让它递归并使其工作。 非常感谢任何帮助和想法!

最佳答案

嗯,这是一个将 for 循环转变为尾递归方法的模板:

//iterative version
public Object getIteratively(Object[] a) {
   Object retVal = null;
   for (int i = 0; i < a.length; a++ ) {
      //do something
   }
   return retVal;
}

//recursive version
public Object getRecursively(Object[] a) {
    doGetRecursively(a, 0, null);
}

private Object doGetRecursively(Object[] a, int i, Object retVal) {
   if ( i == a.length ) {
      return retVal;
   }
   //do something
   return doGetRecursively(a, i+1, retVal);
}

我无法理解为什么你会想用非函数式语言来做到这一点。

在这种情况下,//do some 在两种情况下都是相同的,例如:

if ( a[i].compareTo(retVal) > 0 ) {
   retVal = a[i];
}

关于java - 将getLargest重写为Java中的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798618/

相关文章:

javascript - 如何在 Javascript 中创建具有随机 x 和 y 坐标的对象列表?

algorithm - 创建一个函数,但也要确保我实现了另一个函数。是否可以?

python - 超出 Django 最大递归深度

javascript遍历数组并根据条件执行操作

Java/斯卡拉 : understanding Play framework custom tag or helper

java - JVM "throw"异常怎么办

Java: Connect 4 Winning 对角线

java - 比较不同类型的项目--用户输入和索引返回(使用Java)

javascript - Gridster 将数据序列化为 1-5 顺序(递归循环)?

java - 获取 JPanel 的显示区域尺寸,Windows 与 Mac