【问题标题】:I'm getting a segmentation fault error in my program, but it is unclear how我的程序出现分段错误错误,但不清楚如何
【发布时间】:2021-12-26 19:30:31
【问题描述】:

根据我对分段错误的理解,它们发生在您尝试访问程序“空间”之外的内存时。我的 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;
}

【问题讨论】:

  • 函数 long double continue_fraction(int k, int i){ 没有意义,因为它的参数 i 没有被使用。
  • 在调试器中浏览程序,您可能会注意到continued_fraction 的返回值是0,对于k 的某些值。
  • 我看到continued_fraction的不定式递归
  • @chux-ReinstateMonica 抱歉误解了你的意思。

标签: c++ recursion pi continued-fractions


【解决方案1】:

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

让我们致电continued_fraction(1, 1)。然后我们进入 for 循环,它重新定义 i 并将其设置为 1 然后第一次迭代时:continued_fraction(k, i++); 它这样做:continued_fraction(1, 1),因为后增量提供旧的 i

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多