使用递归查找数组的最小值?

Van*_*nce 6 java recursion minimum

好吧,所以我一直试图用Java包围递归,我可以完成简单的任务,如求和,倒转等等.但我一直在努力做这个练习:

我试图使用递归找到数组中的最小数字但仍然得到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
Run Code Online (Sandbox Code Playgroud)

Gar*_*han 5

提示:您正在findMin递归调用,但之后不使用其返回值.

(1)整个数组的最小值,(2)第一个元素和(3)除第一个元素之外的所有内容的最小值之间的关系是什么?


小智 5

这是一个简化版本:

public static double min(double[] elements, int index) {

  if (index == elements.length - 1) {
    return elements[index];
  }

  double val = min(elements, index + 1);

  if (elements[index] < val)
    return elements[index];
  else
    return val;
}
Run Code Online (Sandbox Code Playgroud)


Col*_*inD 4

这段代码存在多种问题,包括:

  • 您不使用递归调用的结果findMin
  • startIndex每次调用 都会相同findMin,因为currentIndex被设置为startIndex 之前 startIndex的值递增。
  • 如果数组中索引 1 处的数字 <= 索引 0 处的数字,则只需返回该数字,甚至无需进行递归调用。