簡體   English   中英

Java遞歸根函數

[英]Java recursive root function

我寫了一個函數來找到給定函數的java根,它找到根就很好,但是當我返回根時,它返回傳遞給函數的m的初始值,而不是最終值。 我在函數中添加了一堆print語句以確保已達到該值,這是我的問題是如何從函數中傳遞m的最新版本而不是舊版本? 我的代碼如下所示。

public static double bisect (double a, double b, double tolerance)      
{
    double m = (a+b)/2;
    double q = 0;
    while(q < tolerance){
        if (m*m*m - 2.0*m  - 3.0 == 0.0){
            return m;
        }
        else if((a*a*a - 2.0*a  - 3.0)*(m*m*m - 2.0*m  - 3.0)<0){
            q++;
            System.out.printf("%1.15f %1.15f %1.15f\n",a,m,b);
            b = m;
            bisect(a,b,1.0e-10);
        }
        else if((b*b*b - 2.0*b  - 3.0)*(m*m*m - 2.0*m  - 3.0)<0){
            q++;
            System.out.printf("%1.15f %1.15f %1.15f\n",a,m,b);
            a = m;
            bisect(a,b,1.0e-10);

        }
    }
    return m;
}

我的打印輸出看起來像這樣

1.000000000000000 1.500000000000000 2.000000000000000

1.500000000000000 1.750000000000000 2.000000000000000

1.893289196304497 1.893289196304498 1.893289196304499

我削減了數百步之間的距離,但是1.89是我想要達到的價值,那么我如何實現呢? 現在它返回1.5,這是我的m初始值。

bisect返回一個雙bisect值。 當您在方法中(遞歸)調用它時,您對返回值不做任何事情:

a = m;
bisect(a,b,1.0e-10);

您想要將m的值設置為返回值:

a = m;
m = bisect(a,b,1.0e-10);

您可以進一步簡化一下:

m = bisect(m, b, 1e-10);

當我弄清楚它做了什么時,我最終簡化了一點,這是我的簡化版本。 可能有用嗎?

public static double bisect(double a, double b, double tolerance) {
    double m = (a + b) / 2;
    double q = 0;
    while (q < tolerance) {
        if (m*m*m - 2*m - 3 == 0)
            return m;
        else if ((a*a*a - 2*a - 3) * (m*m*m - 2*m - 3) < 0)
            m = bisect(a, m, 1.0e-10);
        else if ((b*b*b - 2*b - 3) * (m*m*m - 2*m - 3) < 0)
            m = bisect(m, b, 1e-10);
        q++;
    }
    return m;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM