首先,我是一个初学者编码器,所以如果这个问题看起来有点愚蠢,我提前道歉。
我确实知道一种使用递归来查找数组中最小值的方法,如下所示。
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);
}
同样有趣的是,如果
min_p()
不是正数,您的原始代码和 arrSize
都会导致 UB ...关于c++ - 有没有办法在递归中使用指针来找到数组的最小值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50592107/