如何使用指针结合递归实现数组最小值查找?
完全没问题呀!初学者愿意尝试不同实现方式真的特别好~其实指针版本的递归查找思路和你已经掌握的版本几乎一致,只是把“返回最小值”改成“返回最小值所在位置的指针”就可以了,我给你写个简单的实现:
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
相关产品推荐
相关产品推荐

