我有一个函数,它几乎无限次地调用自己,但它确实有一个结束。它计算数学公式(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/