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