我正在解决的问题是:
古希腊人已知以下计算方法 平方根。给定值 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语句的逻辑正确吗?我不相信这是真的,考虑到我遇到了堆栈溢出错误。
我所做的不是“<" 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);
}
}
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- 数字