如何找出递归平方根猜测程序的基本情况

问题描述 投票:0回答:2

我正在解决的问题是:

古希腊人已知以下计算方法 平方根。给定值 x > 0 和平方根的猜测 g,a 更好的猜测是 (g + x/g) / 2. 编写一个公共的递归辅助方法 静态 squareRootGuess(双 x, 双 g)。如果 g^2 大约为 等于x,返回g,否则返回squareRootGuess 更好的猜测。然后写一个方法 public static squareRoot(double x) 使用辅助方法。

我不确定我应该在这里做什么。我不相信我的基本情况对于这个函数来说是正确的。我不太清楚问题到底在问什么。

public class rootchecker {

    public static void main(String[] args) 
    {
        System.out.println(squareRoot(125));
        System.out.println(squareRoot(4));
    }

    // helper
    public static double squareRoot(double x)
    {
        return squareRootGuess(x, x-1);
    }

    // recursive
    public static double squareRootGuess(double x, double g)
    {
        if (x == 1)
        {
            return 1;
        }
        else
        {
            double ans = (g + (x/g) / 2);
            return squareRootGuess(x-1, ans);
        }
    }


}

更新:

我已经修复了我的基本情况。我的代码现在如下:

public class rootchecker {

    public static void main(String[] args) 
    {
        System.out.println(squareRoot(125));
        System.out.println(squareRoot(4));
    }

    // helper
    public static double squareRoot(double x)
    {
        return squareRootGuess(x, x-1);
    }

    // recursive
    public static double squareRootGuess(double x, double g)
    {
        if (Math.abs(Math.sqrt(x) - g) < 0.001)
        {
            return g;
        }
        else
        {
            double ans = (g + (x/g) / 2);
            return squareRootGuess(x, ans);
        }
    }


}

继续问题,我的else语句的逻辑正确吗?我不相信这是真的,考虑到我遇到了堆栈溢出错误。

java recursion
2个回答
0
投票

我所做的不是“<" in the if statement I changed it to "<=" and it worked.

public static double squareRootGuess(double x, double g)
    {
        if (Math.abs(Math.sqrt(x) - g) <= 0.001)
        {
            return g;
        }
        else
        {
            double ans = (g + (x/g) / 2);
            return squareRootGuess(x, ans);
        }
    }

0
投票
enter code here public static double wurzel(double unten, double oben, double zahl)
{
    double mittel = (unten + oben) / 2.0;
    if(Math.abs(mittel*mittel - zahl) < 0.000000001)
    {
        return mittel;
    }
    if(mittel*mittel > zahl)
    {
        return wurzel(unten, mittel,zahl);
    }
    else
    {
        return wurzel(mittel,oben,zahl);
    }
        
}

// unten- 下限,oben - 上限,zahl- 数字

© www.soinside.com 2019 - 2024. All rights reserved.