本文介绍了大规模递归函数中的分段错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个函数可以调用自己几乎无限次,但是它确实有一个结局.它计算数学公式(在TeX中):
I have a function that calls itself a near infinite amount of times, but it does have an end. It calculates the mathematical formula (in TeX):
当 x< a
时:
g_{a}(x)=1
当 x> = a
时:
g_{a}(x)=g_{a}(x-1)+g_a(x-a)
这是我的代码(c++):
Here is my code(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?
I call the function with g(sqrt(10000019),10000019);
How do I stop the SEGFAULT?
推荐答案
我怀疑您的段错误是由于堆栈空间不足所致.
I suspect your seg-fault was from running out of stack space.
您可以限制/取消限制堆栈空间的大小(至少在Linux上)使用tcsh的limit命令.
You can limit/unlimit how big your stack space is (on Linux at least)using the limit command from tcsh.
% limit
cputime unlimited
filesize unlimited
datasize unlimited
stacksize 10240 kbytes
coredumpsize 0 kbytes
memoryuse unlimited
vmemoryuse unlimited
descriptors 4096
memorylocked 64 kbytes
maxproc 1024
然后您可以限制堆栈大小
You can then unlimit your stacksize
% 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
再试一次.
这篇关于大规模递归函数中的分段错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!