C ++递归函数,使用高和低来查找数组中的最小值

时间:2017-03-19 19:18:31

标签: c++ arrays recursion

我正在学习c ++并且正在编写一个递归函数来查找数组中的最小值。该函数给出一个整数数组和两个指数:低和高(低<高)以指示需要考虑的指数范围。

这是一项家庭作业,我花了几个小时研究尝试上班。该程序返回“线程断点”我觉得我在正确的轨道上,但可能会遗漏一些东西。如果有人可以指出我正确的方向或给我一个暗示我做错了什么。谢谢!

int minInArray2(int *arr, int low, int high) {
  int size = sizeof(*arr);
  int temp;
  low = arr[0];
  high = sizeof(arr - 1);

  if (size == 0) {
    return arr[0];
  }

  if (low < high) {
    temp = low;
    low = high;
    high = temp;
  }
  return minInArray2(arr, low, high);
}

1 个答案:

答案 0 :(得分:0)

很多错误。

int size = sizeof(*arr); will give `sizeof(int)` You want `sizeof(arr)`

不需要尺寸。

下一步

low = arr[0];  //    Not Needed because you pass these value from function.
high = sizeof(arr - 1);//

接下来

 if (low < high) {
    temp = low;
    low = high;
    high = temp;
  }

根本不需要。您可以在传递时交换变量。 与minInArray2(arr,high,low);一样//注意参数

最后是递归问题

检查出来

int minInArray2(int *arr, int low, int high) {
  if(low>high) //Your case when low greater than high
  {
    return minInArray2(arr,high,low); // Just pass high first and then low
  }

  if(low==high) //Condition to come out of recursion
    return arr[low];
  int temp = minInArray2(arr,low+1,high); //Call function again and again 
//always with incremented low's value at each recursion
  if(arr[low]<temp)  //compare and return the least among 2
    return arr[low];
  else
    return temp;
}