了解使用递归查找数组最小值的程序

时间:2016-08-24 19:45:32

标签: java arrays recursion

我需要一些帮助才能理解下面找到数组中最小数字的程序,我理解在递归中你应该在一个结束递归的基本情况下划分问题,然后分成更小的步骤最终成长为最初的基础案例。

据我所知,只要索引到达数组中的最终位置,就会满足基本情况。但是,我真的不明白在下面的程序中,该方法会让自己回过头来继续推进整个阵列。

为什么它会继续检查完整数组的值而不是在检查第一个值后停止?

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;
}

2 个答案:

答案 0 :(得分:2)

if (elements[index] < val)
    return elements[index];

你问为什么第一次没有回到那里,对吧?嗯,确实如此,但这很好,因为它已经进行了递归调用 - 它就是这样做的:

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

所以它会到达那个调用,下降一个级别,并反复重复直到达到基本情况终止条件:

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

然后当它回到调用堆栈时,它将进行实际比较并找到最少的。

有意义吗?

答案 1 :(得分:-2)

使用这段java代码可以让它更容易理解:

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

  if (index == elements.length - 1) {
    System.out.println(elements[index] + " returned from recursion");
    return elements[index];
  }

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

  if (elements[index] < val) {
    System.out.println(elements[index] + " is less than " + val);
    System.out.println(elements[index] + " returned from recursion");
    return elements[index];
  }
  else {
    System.out.println(val + " is less than " + elements[index]);
    System.out.println(val + " returned from recursion");
    return val;
  }
}

致电min(array_from_which_to_find_min, 0);