私が働いている問題を推測する再帰的な平方根のための基本ケースが何であるかを把握する方法この:プログラム
次のような方法が 平方根を計算するために古代ギリシャ人に知られていました。値x> 0と平方根の推測gを仮定すると、 は(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);
}
}
}
引き続き、問題を解決するために、私のロジックは正しいですか?スタックオーバーフローエラーが発生したと考えて、それは信じられません。
それをg^2はxにほぼ等しい場合は、 'グラムを返すべきときに出て書いた文章で述べている、G'戻る – JackVanier
だから、それはだ単に'場合(X == Math.sqrt(2.0)) ; '? – Matt
彼らはおおよそ等しいと言ったので、私は ''(Math.sqrt(x)-g)<0.001) 'を書くでしょう。 – 4castle