递归调用函数时出现分段错误

roj*_*cyk 4 c recursion function segmentation-fault

我的任务是创建一个函数来计算我的输入的反正弦。

我尝试使用 xcode 来调试它。一切正常,直到arcsin(new);调用返回为止。然后是一个segmentation fault: 11. 我不知道为什么,但float arcsin(floatvalue){ ... }运行第二个周期时的断点告诉我 float old 和 float value 是NAN

float arcsin(float value){

     float old = value;
     float new = value + (0.5 * ((value * value * value)/3));
     float accurate = 0.00001;  

     if ((new - old) < accurate){
        return new;
     }

     else{
        return arcsin(new);
     }
}


int function_arcsin(int sigdig, float value){

    value = arcsin(value);
    printf("%.10e\n",value);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 5

当调用堆栈变得太大时,即递归级别太多时,就会发生段错误。

在您的情况下,这意味着条件(new - old) < accurate将始终评估为 false - 好吧,也许并不总是,但足够多次来使调用堆栈膨胀。

测试您的代码,我发现new(可能不是一个好的变量名称选择)不断增长,直到超过浮点数的限制。你的算法可能是错误的。