c++ - 有没有办法在递归中使用指针来查找数组的最小值?

标签 c++ pointers recursion

首先,我是一个初学者,所以如果这个问题看起来有点愚蠢,我提前道歉。

我确实知道一种使用递归来查找数组中最小值的方法,如下所示。

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...

关于c++ - 有没有办法在递归中使用指针来查找数组的最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50592107/

相关文章:

C++、指针、引用、从一个函数传递到另一个函数、std::vector、std::string

python - 在列表中查找最大值时出现意外值 None - Python 3 递归

c++ - 如何在 C++ 中将 vector<int> 连接到单个 int?

c++ - 使用常量修改重载成员运算符

c - C 中的 strtok 和 int 与 char

mysql - 选择MySQL表中的树路径

Android - 递归调用处理程序时出现垃圾收集器错误

c++ - 调用 CUDA 内核时会发生什么?

c++ - 引用,地址,取消引用和指针的含义

c - 指向多维数组的指针数组