Java中Wallis函数的递归实现

这是Wallis函数:

Java中Wallis函数的递归实现

我努力地暗示是递归的。这是我最好的尝试

private static double computePiOver2(int n) {
    int original_n = n;
    double prod = 1.0;
    int reps = 0;

    if(reps == original_n)
        return prod;
    else {
        reps += 1;
        n += 1;
        prod *= computePiOver2(2*n/(2*n-1)*(2*n/(2*n+1)));
        return prod;
    }

我正在使用此代码对其进行测试

public static void main(String[] args) {
    for(int i = 0; i < 100; i++){
       System.out.println(Math.PI/2 + " vs. " + computePiOver2(i));
    }
}

但是我的答案始终是1.0。我在做什么错?

我尝试将n翻倍:

private static double computePiOver2(double n) {
        int original_n = (int) n;
        double prod = 1.0;
        int reps = 0;

        if(reps == original_n)
            return prod;
        else {
            reps += 1;
            n += 1;
            prod *= computePiOver2(2*n/(2*n-1)*(2*n/(2*n+1)));
            return prod;
        }
    }

但是我只是遇到stackoverlow错误。

q273225308 回答:Java中Wallis函数的递归实现

我有两个错误,整数除法(感谢@azurefrog)和不正确的递归技术(感谢@David M)。我应该像这样计算递归调用

(2n/(2n-1))*(2n/(2n+1)) * computePiOver2(n-1)

这是工作功能:

private static double computePiOver2(int n) {
    double prod = 1.0;
    int reps = 0;

    if(reps == n)
        return prod;
    else {
        reps += 1;
        return 2.0*n/(2*n-1)*(2.0*n/(2*n+1)) * computePiOver2(n-1);
    }
}
本文链接:https://www.f2er.com/3141199.html

大家都在问