gpt4 book ai didi

c++函数返回 vector 中的最小正整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:49 24 4
gpt4 key购买 nike

我正在使用下面的代码,它返回 vector 中的最小正整数。我得到了代码 here .我的问题是有理由将大小传递给函数,你不能在函数体中计算它吗?

另外,第二个 if() 测试是为了什么?我不明白这个 if 语句是如何工作的?

#include <vector>
using namespace std;
int rec_min_pos(const vector<int> & nums, int size) {
if (size < 1) {
return INT_MAX;
}
if(nums[size-1] > 0){
return min(nums[size-1], rec_min_pos(nums, size-1));
}
else{
return rec_min_pos(nums, size-1);
}
}

最佳答案

第二个 if 语句检查元素的正性,因为该函数应返回最小的整数。

您的函数是递归的,'size' 参数实际上是一个加上要测试的最后一个元素的索引。这允许简单的递归函数设计,但需要一个额外的参数。在函数接口(interface)中明确这些点大概会更好

inline int recursive_min_positive(const int*arr, size_t i)
{
return
i==0? std::numeric_limits<int>::max() :
arr[i-1]<=0? recursive_min_positive(arr,i-1) :
std::min(arr[i-1],recursive_min_positive(arr,i-1) ;
}

int min_positive(std::vector<int> const&arr)
{
return recursive_min_positive(arr.data(), arr.size());
}

递归函数设计通常很优雅,但效率低下(尽管编译器倾向于展开递归)。在这里,非递归实现实际上更短更清晰。

int min_positive(std::vector<int> const&arr)
{
int result = std::numeric_limits<int>::max();
for(auto val : arr)
if(0 < val && val < result) result = val;
return result;
}

关于c++函数返回 vector 中的最小正整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49729643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com