将 int 添加到长整型
Adding int to long
我正在创建一个递归公式来将vector
中的所有元素相加。他们遇到的问题是我的结果没有添加到vector
结果中,所以它总是返回0
.我已经尝试static_cast
把它变成一个int
但我仍然无法弄清楚。这是我的代码:
long vectorSum(const std::vector<int>& data, unsigned int position) {
int ret = 0;
if(position == data.size()-1) {
return ret;
} else {
ret += data[position];
return vectorSum(data, position+1);
}
}
我像这样调用函数:
std::vector<int> test1;
for(int i = 0; i < 10; i++) {
test1.push_back(i);
}
cout << vectorSum(test1, 0) << "n";
这是
不正确的:
ret += data[position];
return vectorSum(data, position+1);
ret ( += data[position]
( 的新值未在任何地方使用或传递回调用方。
Remeber:ret
是每次调用 vectorSum()
的严格本地。 它不存在于你的 vectorSum(( 之外;每次调用 vectorSum(( 时,它都会设置为"0"。
long vectorSum(const std::vector<int>& data, unsigned int position) {
if(position == data.size())
return 0;
else
return data[position]+vectorSum(data, position+1);
}
然后称其为int sum=vectorSum(data,0(;
通常,一个会增加递归调用的值。你没有这样做。在您的代码中,它将使用修改后的position
继续调用,直到达到终止条件,然后该return 0;
一直返回到调用方。
long vectorSum(const std::vector<int>& data, unsigned int position) {
int ret = 0;
if(position == data.size()-1) {
return ret;
} else {
ret += data[position]; //this line has no affect on the result!
return vectorSum(data, position+1); //you don't accumulate anything
//this will always return 0
}
}
相反,您希望将当前值加上递归调用中的值:
long vectorSum(const std::vector<int>& data, unsigned int position) {
if(position == data.size()-1) {
//terminating condition, return 0
return 0;
} else {
//add current value plus value from processing the rest of the list
return data[position] + vectorSum(data, position+1);
}
}
作为旁注:递归是一个很好的工具,但它很容易被滥用,因为它已经有更好、更优雅的解决方案。为此,像 std::accumulate 这样的东西可能是C++最"自然"的解决方案。
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 将长整型值打印为带有前导零的十六进制
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 环礁和(长整型)的区别?
- 将逗号格式化为长整型整数
- 如何将长整型传递给 itoa 函数?
- 是否存在将长整型转换为指针有效的情况
- 在 C++ 中创建一对长整型和矢量时出现编译错误
- 当我使用长整型时,我的代码不起作用,它与 int 一起工作得很好
- 将字符串中以十六进制形式存储的负长整型值转换为 C++ 中的长整型变量
- 为什么当我们把变量"u"的数据类型从长整型更改为整型时,模幂会出错?
- 错误:请求从 std::chrono::time_point 浮点数转换为非标量类型长整型
- 将 int 添加到长整型
- 添加不带长整型的整数