[英]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.