将 int 添加到长整型

Adding int to long

本文关键字:长整型 添加 int      更新时间:2023-10-16

我正在创建一个递归公式来将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++最"自然"的解决方案。