使用递归C ++的最小int数组

时间:2016-05-03 02:58:09

标签: c++ arrays recursion

我正在尝试使用递归来查找数组中的最小整数。

这是我的代码:

int minArray(int* array, int size){
    if (size == 0){
        return array[0];
    }
    int min = array[0];
    if (min > minArray(array+1,size-1)){
        min = minArray(array+1,size-1);
    }
    return min;
}

它出了什么问题? 如果我在{1,2,3,4,5}上调用该函数,它将返回0.

2 个答案:

答案 0 :(得分:6)

条件错了。零元素数组没有元素,因此访问它的array[0]是非法的。

还应避免在此功能中调用该函数两次。

试试这个:

int minArray(int* array, int size){
    if (size == 1){
        return array[0];
    }
    int min = array[0];
    int candidate = minArray(array+1,size-1);
    if (min > candidate){
        min = candidate;
    }
    return min;
}

答案 1 :(得分:0)

此解决方案类似于@MikeCat。我添加了迭代版本仅用于比较目的。

int min( int str[], int size)
{
  if (1==size)  // base case
  return str[0];
 else {
  int minor=min(&str[1],size-1); // each time the function is called its receives an array with an element less than the previous call.
  return str[0]<=minor ? str[0] : minor;
  }
}


// iterative approach. I have added the minor´s position indicator.
int mini(int str[], int size, int* position)
{
 int minor=str[0];
 for (int i=1;i<size;i++)
  if (str[i]<minor) {
   minor=str[i];
   *position=i;
   }
 return minor;
}