【发布时间】:2018-03-07 18:24:45
【问题描述】:
我正在尝试编写一个简单的递归函数来计算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;
}
【问题讨论】:
-
SumRec并不总是返回承诺的int。这会对程序造成严重破坏。谁知道会发生什么。 -
你需要注意那个编译器警告说“不是所有的代码路径都在非空函数中返回一个值”
-
请注意,执行此类操作的递归函数通常非常糟糕。堆栈空间只有这么多。
-
无论那条线如何,它都有未定义的行为,但只有在该线出现时,您才能观察到它。正如其他人指出的那样,您不会通过
if的每个分支返回int,只有一个,因此它会返回n!=1的垃圾。打开所有编译器警告以捕捉像这样的简单错误。 -
@tadman 好的,我现在知道了....非常感谢您的帮助,