我正在学习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);
}
答案 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;
}