c++ - 大规模递归函数中的段错误

标签 c++ math

我有一个函数,它几乎无限次地调用自己,但它确实有一个结束。它计算数学公式(TeX 中):

何时 x<a :

g_{a}(x)=1

何时 x>=a :

g_{a}(x)=g_{a}(x-1)+g_a(x-a)

这是我的代码(c++):

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <cmath>
using namespace std;
double g( double a, double x){
    if (x>=a) return (g(a,x-1)+g(a,x-a));
    else if (x<a) return 1;
    return 0;
}
int main(){cout << g(sqrt(10000019),10000019);}

我用 g(sqrt(10000019),10000019); 调用该函数 如何停止SEGFAULT?

最佳答案

我怀疑您的段错误是由于堆栈空间不足造成的。

你可以限制/不限制你的堆栈空间有多大(至少在Linux上) 使用 tcsh 中的 limit 命令。

 % limit 
cputime      unlimited
filesize     unlimited
datasize     unlimited
stacksize    10240 kbytes
coredumpsize 0 kbytes
memoryuse    unlimited
vmemoryuse   unlimited
descriptors  4096 
memorylocked 64 kbytes
maxproc      1024 

然后您可以无限限制堆栈大小

% unlimit stacksize
% limit

cputime      unlimited
filesize     unlimited
datasize     unlimited
stacksize    unlimited
coredumpsize 0 kbytes
memoryuse    unlimited
vmemoryuse   unlimited
descriptors  4096 
memorylocked 64 kbytes
maxproc      1024 

再试一次。

关于c++ - 大规模递归函数中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998209/

相关文章:

math - 映射 3D 空间中两个三角形之间的点

algorithm - 确定一组数据是来自线性函数还是对数函数?

c# - 整数除以整数返回值以整数形式返回什么

c++ - 考虑到其他好处,关键字 'auto' 真的有助于简化 C++ 中的调试吗?

c++ - 反转 4x4 矩阵

ruby - 算术在 ruby 中给出了意想不到的值(value)

c++ - 使用 CMake 创建包含文件

c++ - 如何用DirectShow写一个avi文件

c++ - CLIon - 使用 SDL_TTF 的 undefined reference

c++ - 从模板派生