我正在尝试在C ++中编写一个简单的递归求和函数:
long long int recursum(long long int n){
if(n==1)
return 1;
else
return recursum(n-1)+n;
}
这应该可以工作,但是我得到的段错误值大于〜250000。我非常确定这应该起作用,因为这是一个非常简单的带有终端语句的递归。
您必须为编译器激活优化,以尝试“取消递归”函数,以免爆炸您的调用堆栈。
在我的计算机上测试过的示例
#include <iostream>
long long int recursum(long long int n){
if(n==1)
return 1;
else
return recursum(n-1)+n;
}
int main(int argc, char const *argv[])
{
std::cout << recursum(99000) << std::endl;
return 0;
}
不乐观:
$ ./a.exe
Segmentation fault (core dumped)
与g++ -O3
:
$ ./a.exe
4900549500
我什至尝试使用500000。
尾递归优化和诸如此类的事情(我不知道其他人的名字)在没有对优化的具体需求的情况下就无法完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句