使用递归来查找最小值的位置

时间:2016-06-09 00:38:04

标签: recursion

我正在研究递归。我知道基础知识,并了解它是如何工作的,但我遇到了麻烦。我编写代码使用递归来查找数组中min值的位置,即:

 public static int findMinPosition(int[] list, int position)
 {
  int minPosition = 0;
  if(position == list.length)
  {

  }

  else if(position != list.length)
  {
    minPosition = findMinPosition(list, position+1);
    if(list[position] < list[minPosition])
    {

      return minPosition = position;
    }

  }
  return minPosition;
 }

这完美无缺,但我不确定如何。我了解除minPosition = findMinPosition(list, position+1);以外的所有内容。我认为这只能从方法中返回值,所以我最初也调用了方法,因为这是递归的关键。但似乎所有我需要的是代码行...... minPosition = findMinPosition(list, position+1);调用方法是什么?

很抱歉粗略的解释和任何帮助都很有用

1 个答案:

答案 0 :(得分:1)

是的,该行调用该方法。用语言来说,这就是说:“从列表的 rest 中给出我最小的位置。”下一行将第一个值与该最小值进行比较,并将较小项的索引传递回其调用者。

你可以通过消除结构膨胀来缩短这一点:

M-x + [ 

您可以通过在每次递归上传递剩余列表而不是原始列表和索引来进一步减少此操作。我会把它作为学生的练习。