有没有办法在递归中使用指针来查找数组的最小值?
Is there a way to use pointers in recursion to find the minimum of an array?
首先,我是一个初学者,所以如果这个问题看起来有点愚蠢,我提前道歉。
我确实知道一种使用递归在下面这样的数组中查找最小值的方法。
int findMinRec(int A[], int n)
{
if (n == 1)
return A[0];
return min(A[n-1], findMinRec(A, n-1));
}
但是,我正在尝试找出一种使用递归和指针的方法。像这样:
const int *min(const int arr[], int arrSize) {
有没有简单的方法可以做到这一点?我尝试以标准方式返工,但我似乎无法弄清楚如何使用指针来做到这一点。
您只需要调整为返回指针而不是值,这意味着您不能使用std::min()
.内联展开并调整它。
我还重命名了您的函数,以使其明显地返回指向最小元素的指针,而不是std::min()
的受限重新实现。
另一个重要的一点是使其尾递归,因此编译器可以轻松地将其优化为迭代并省略添加堆栈帧。
const int *min_p(const int arr[], int arrSize) {
if (arrSize == 1)
return arr;
return min_p(arr + (arr[arrSize - 1] < *arr), arrSize - 1);
}
同样有趣的是,如果arrSize
不是积极的,您的原始代码和min_p()
都会导致 UB......
尝试这样的事情:
const int *_min(const int *arr, int arrSize)
{
if (arrSize == 1)
{
return arr;
}
const int *t = _min(arr + 1, arrSize - 1);
if (*t < *arr)
{
return t;
}
return arr;
}
这里的关键是要理解A
是一个指针。因此,如果要返回指针而不是值,只需执行此操作即可。将return A[0];
更改为return A;
。
相关文章:
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 需要使用模板查找数组的第二个最小和最小值
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- 查找数组中指示性较大但数组中值较小的元素
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 查找数组中的最小数字
- 查找数组中重复(重复)数字的索引
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 查找数组中给定数字的出现次数
- 使用 std::累加来查找数组的总和
- 代码以查找数组中的最大数字,但它仅将第一个数字显示为最大数字. 有人请告诉我为什么
- 在不进行排序的情况下查找数组中n个最小值的索引
- 当数组在C++中用作参数时,查找数组的元素数
- 查找数组中数组元素的重复出现?
- 查找数组最后 3 个数字的平均值
- 查找数组中是否存在C++元素
- 查找数组中的最小更改数以进行 k 算术级数
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 有没有办法在递归中使用指针来查找数组的最小值?
- 在编写代码以查找数组中的对数时获取分段错误