You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用指针结合递归实现数组最小值查找?

完全没问题呀!初学者愿意尝试不同实现方式真的特别好~其实指针版本的递归查找思路和你已经掌握的版本几乎一致,只是把“返回最小值”改成“返回最小值所在位置的指针”就可以了,我给你写个简单的实现:

const int *min(const int arr[], int arrSize) {
    // 递归终止条件:数组只剩一个元素时,返回该元素的指针
    if (arrSize == 1) {
        return arr;
    }

    // 递归查找前 arrSize-1 个元素中的最小值指针
    const int *prevMin = min(arr, arrSize - 1);

    // 比较递归得到的最小值 和 当前最后一个元素的值,返回较小者的指针
    if (*prevMin <= arr[arrSize - 1]) {
        return prevMin;
    } else {
        return &arr[arrSize - 1];
    }
}

简单解释一下:

  • 终止条件和你的原代码逻辑一致:当数组长度为1时,直接返回当前数组的首指针(也就是唯一元素的地址)。
  • 递归调用时,我们先拿到前arrSize-1个元素里最小值的指针prevMin。
  • 最后对比prevMin指向的值和数组最后一个元素的值,返回对应较小值的指针就好啦。

调用示例:

#include <stdio.h>

// 上面的min函数放在这里

int main() {
    int nums[] = {5, 2, 9, 1, 7};
    int size = sizeof(nums) / sizeof(nums[0]);
    const int *minPtr = min(nums, size);
    printf("数组最小值是:%d\n", *minPtr); // 输出 1
    return 0;
}

另外提个小细节:因为参数arr是const int[],所以返回const int*是合理的,这样能避免通过返回的指针修改原数组,保证安全性。如果需要修改原数组的话,可以去掉const,但一般查找最小值不需要修改,所以保持const更好。

内容的提问来源于stack exchange,提问作者Rodbrollin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:01:29