递归向量中的最小正数
Smallest positive number in a vector recursively
本文关键字:递归向量 更新时间:2023-10-16
我正在编写一个函数,该函数应该递归地找到整数向量中的最小正数。
现在我的代码如下所示:
#include <vector>
using namespace std;
int rec_min_pos(const vector<int> & nums, int size) {
if (size < 1) {
return -1;
} else {
int min = rec_min_pos(nums, size - 1);
if(min < 0){
if(nums[size - 1] <= 0){
return -1;
}else{
return nums[size-1];
}
}else {
if (min < nums[size - 1]) {
return min;
} else {
return nums[size - 1];
}
}
}
}
int main(){
vector<int> nums = {2, -3, 6, -21, 10, -80, 8};
cout << rec_min_post(nums, nums.size());
}
如果我运行这个,我会得到8
,这可能是因为下一个元素是负数。
以前的版本:
#include <vector>
using namespace std;
int rec_min_pos(const vector<int> & nums, int size) {
if (size < 1) {
return -1;
} else {
int min = rec_min_pos(nums, size - 1);
if (min < nums[size - 1]) {
return min;
} else {
return nums[size - 1];
}
}
}
int main(){
vector<int> nums = {2, -3, 6, -21, 10, -80, 8};
cout << rec_min_post(nums, nums.size());
}
我会得到-80
这实际上是最小的值,但我需要最小的正值。
如何从整数向量中获取最小的正值?
def SPN(nums, s):
if s == 0:
# Empty array
return +∞
if nums[s-1] > 0:
# num[s] is admissible, recurse and keep the smallest
return min(nums[s-1], SPN(nums, s-1))
else:
# Just recurse
return SPN(nums, s-1)
print SPN(nums, len(nums)
c++ 版本:
#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);
}
}
更新:
假设不允许保留INT_MAX
表示 +∞,我们可以改用负数,比如 -1
,约定min(x,-1) = x
。
Infty= -1 # Conventional +∞
def Min(a, b):
if b == Infty:
return a
else:
return min(a, b)
def SPN(nums, s):
if s == 0:
# Empty array
return Infty
if nums[s-1] > 0:
# num[s] is admissible, recurse and keep the smallest
return Min(nums[s-1], SPN(nums, s-1))
else:
# Just recurse
return SPN(nums, s-1)
如果我们使用任何负值表示 +∞ 的约定,这将导致我们得到一个更优雅的版本:
def Min(a, b):
if a < 0:
return b
if b < 0:
return a
return min(a, b)
def SPN(nums, s):
if s == 1:
return nums[0] # Assumes len(nums) > 0
return Min(nums[s-1], SPN(nums, s-1))
C++优雅版本:
#include <vector>
using namespace std;
int minimum(int a, int b){
if(a < 0){
return b;
}
if(b < 0){
return a;
}
return min(a, b);
}
int SPN(vector<int> nums, int size){
if(size == 1){
return nums[0];
}
return minimum(nums[size-1], SPN(nums, size-1));
}
相关文章:
- 以C++递归方式查找向量中的最大值
- 尾递归,带有通过引用传递的向量
- 返回向量 C++ 上的递归
- 递归回文检查,不使用向量、大小或其他参数
- n维向量的递归可变参数模板函数
- 在不使用递归的情况下求解所有 2D 字符串向量组合?(C++)
- 使用迭代器对向量的C 递归初始化产生不一致的结果
- 我们应该全局声明一个向量还是在递归函数中传递它以减少内存使用
- 递归向量中的最小正数
- 使用递归C++向量元素的总和
- 如何在递归函数中打印向量
- 递归结构的向量有内存问题
- 递归函数,返回向量中所有元素的总和
- 使用递归的C 在向量中找到非齐射的数量
- boost::variant:具有递归向量类型的奇怪行为
- 在递归函数中收集cout或输出为向量
- 从向量中删除重复项,递归 c++
- 使用递归将元素添加到向量中
- 迭代和递归地查找向量中是否存在元素
- 递归对向量进行排序的最简单方法