如何弄清楚递归平方根猜测程序的基本情况

时间:2016-04-17 22:22:57

标签: java recursion

我正在处理的问题是:

  

古希腊人知道以下方法用于计算   平方根。给定值x> 0和平方根的猜测g,a   更好的猜测是(g + x / g)/ 2.写一个递归的辅助方法public   static squareRootGuess(double x,double 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语句是否正确?考虑到我遇到堆栈溢出错误,我不相信它。

1 个答案:

答案 0 :(得分:0)

我所做的不是和#34;&lt;&#34;在if语句中,我将其更改为&#34;&lt; =&#34;它起作用了。

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);
        }
    }