本文介绍了大规模递归函数中的分段错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个函数可以调用自己几乎无限次,但是它确实有一个结局.它计算数学公式(在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

再试一次.

这篇关于大规模递归函数中的分段错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-14 16:05