0

根据我对分段错误的理解,它们发生在您尝试访问程序“空间”之外的内存时。我的 IDE 说异常发生在for我执行以下操作的第一个循环中:pi = w + i * i;我不明白我如何访问我不应该访问的内存。该程序应该计算 pi,直到给定数量的数字,它还没有完成。发生错误时,我正在测试到目前为止的内容。代码如下:

/// computes the continued fraction, recursivley
int w = 1;
static long double pi = 0;
long double continued_fraction(int k, int i){

    for(int i = 1; i <= k; i++){
        pi += w + i * i;
        w += 2;
        pi /= continued_fraction(k, i++);
    }

    return pi;
}

/// continued fraction method to compute pi, up to a limit k
long double limit_fraction(int k){
    int i = 1;

    /// continued fraction method
    pi = 4 / continued_fraction(k, 1);

    return pi;
}
4

1 回答 1

3

包含的代码具有不定式递归。

让我们打电话continued_fraction(1, 1)。然后我们进入 for 循环,它重新定义i并将其设置为1then 第一次迭代,当它这样做时:continued_fraction(k, i++);它做:continued_fraction(1, 1)因为 post-increments 提供 old i

此调用与第一次调用完全相同,因此递归将永远进行并且您有 stackoverflow - 崩溃。

于 2021-11-15T15:51:27.680 回答