我正在处理的问题是:
古希腊人知道以下方法用于计算 平方根。给定值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语句是否正确?考虑到我遇到堆栈溢出错误,我不相信它。
答案 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);
}
}