C++ 计算n个数之和的递归函数的意外输出

C++ 计算n个数之和的递归函数的意外输出,c++,recursion,C++,Recursion,我试图编写一个简单的递归函数来计算n个数的和。因此,我编写了下面的代码,它工作得很好,但是当我试图在递归函数中打印sum时,它(在主函数中)打印一个随机数 int SumRec(int n, int sum) { sum+=n; if(n==1) return sum; else SumRec(n-1,sum); cout<<sum<<endl; } int main() { cout<<

我试图编写一个简单的递归函数来计算
n
个数的和。因此,我编写了下面的代码,它工作得很好,但是当我试图在递归函数中打印
sum
时,它(在主函数中)打印一个随机数

int SumRec(int n, int sum)
{
    sum+=n;
    if(n==1)
        return sum;
    else
        SumRec(n-1,sum);
    cout<<sum<<endl;
}

int main()
{
    cout<<SumRec(2,0)<<endl;

    return 0;
}
intsumrec(intn,intsum)
{
总和+=n;
如果(n==1)
回报金额;
其他的
SumRec(n-1,总和);

cout您应该确保
SumRec
返回一个整数值,只要您在声明它时承诺的那样。我看到如果
n==1
它返回
sum
,否则就不返回!所以您应该使它看起来像:

int SumRec(int n, int sum){
    sum += n;
    if(n == 1)
        return sum;
    else
        sum = SumRec(n - 1, sum);

    cout << sum << endl;
    // when done from recursion i should return a value as i promised
    return sum;   
}
intsumrec(intn,intsum){
总和+=n;
如果(n==1)
回报金额;
其他的
sum=SumRec(n-1,sum);

cout
SumRec
并不总是返回承诺的
int
。这会对程序造成严重破坏。谁知道会发生什么。您需要注意编译器警告,该警告指出“并非所有代码路径都在非空函数中返回值”需要注意的是,用于执行这类操作的递归函数通常非常糟糕。堆栈空间非常有限。不管哪一行,它都有未定义的行为,但只有当这一行存在时,你才能观察到它。正如其他人指出的,你不会通过该
if
的每个分支返回
int
,只有一个,因此,它返回的是
n!=1
的垃圾。打开所有编译器警告以捕获像这样的简单错误。@tadman好的,我现在知道了……非常感谢您的帮助,