好的,所以我一直试图围绕Java递归,并且我可以完成诸如sum,reversing等简单任务,但我一直在努力做这个练习:使用递归寻找数组的最小值?
我试图使用递归找到数组中的最小数字,但不断得到0.0的答案。
我对递归的理解是,我需要增加一个元素,然后提供一个将结束递归的基本情况。当我不得不返回一个值,以及何时最好调用递归方法时,我想我会搞砸了。
这是我到目前为止有:
public static double findMin(double[] numbers, int startIndex, int endIndex) {
double min;
int currentIndex = startIndex++;
if (startIndex == endIndex)
return numbers[startIndex];
else {
min = numbers[startIndex];
if (min > numbers[currentIndex]) {
min = numbers[currentIndex];
findMin(numbers, currentIndex, endIndex);
}
return min;
}
} //findMin
那么,在我调用递归findMin方法之前,是否应该返回语句呢?另外,我不了解startIndex是如何改变的。当我调用递归findMin方法时,我使用currentIndex(而不是startIndex)参数,然后应该将其作为新的startIndex传递,是正确的吗?我认为我开始迷惑自己:( – Vance 2011-04-08 22:39:46
@ user699302:问题是'currentIndex = startIndex ++'。当'startIndex'为0时,'currentIndex'变为0,'startIndex'变为1.当您调用'findMin' ,你把它传递给'currentIndex',所以在那个调用中'startIndex'将会再次变为0,导致无限递归和堆栈溢出。 – ColinD 2011-04-09 01:27:41