繁体   English   中英

使用Java中的递归从无限级数(pi = 4-4 / 3 + 4 / 5-4 / 7 + 4 / 9-4 / 11…。)中找到pi的值

[英]Find the value of pi from the infinite series (pi=4-4/3+4/5-4/7+4/9-4/11…. ) using recursion in java

我已针对该问题进行了多次尝试,但我认为这是我能获得的最接近的结果。 这种解决方案使方法无限递归,因为我没有基本案例,也无法弄清楚。 counter ++行无法访问,我无法使用它,而且我很累。 循环很容易,但是递归对我来说是个新概念,如果有人帮助我解决这个问题,我将非常感激。

public static double pi(int a, double b){
int counter=0;

if (counter %2==0){
    return a-(a/(pi(a,b+2)));
    counter++;
} else { 
    return a+(a/(pi(a,b+2)));
    counter++;
}

您可以传入另一个int,例如limit ,然后添加以下代码:

if (b > limit) {
    return a;
}

或者您可以传递一些公差值:

if (pi(a,b+2) < tolerance) {
    return a;
}

每当您使用递归时,最好预先建立退出策略。

这是一个可行的实现。 不要使用它:

public static double term(double acc, int n, int r) {
    if (r-- > 0) {
        double sgn = (n % 4 == 1) ? +1.0 : -1.0;
        acc += sgn * 4.0 / n;
        n += 2;
        return term(acc, n, r);
    } else {
        return acc;
    }
}

public static double pi() {
    return term(0.0, 1, 1000);
}

不使用它的原因是,这个特定的无穷级数计算π的方法特别差,因为它收敛非常慢。 在上面的示例事件中,执行1000次迭代后,由于最终计算出的项是4/1000,因此它仍然只能正确保留小数点后3位。

即使term函数具有(我认为)潜在的尾部递归功能,但经过1000次以上的迭代后,都会导致堆栈溢出错误,而准确性却几乎没有提高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM