【问题标题】:How to figure out what the base case for a recursive Square root guessing program如何找出递归平方根猜测程序的基本情况
【发布时间】:2016-04-17 22:22:56
【问题描述】:

我正在处理的问题是:

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

【问题讨论】:

  • 它在你写的文本中说你应该什么时候返回 g If g^2 is approximately equal to x, return g
  • 所以它只是if (x == Math.sqrt(2.0));?
  • 他们说大约相等,所以我会这样做if (Math.abs(Math.sqrt(x) - g) &lt; 0.001)
  • 那么你需要一个大约的定义。你能在 0.000000001 之内 0.5 之内的 1 个整数之内 近似值是多少?
  • 你把右括号放错了地方。它可以是(g + x / g) / 2。由于运算顺序,x / g 周围不需要括号。

标签: java recursion


【解决方案1】:

我所做的不是在 if 语句中使用“

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2014-12-14
    • 2017-02-07
    相关资源
    最近更新 更多