gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:38:17 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com