Das Problem Ich arbeite an dieser ist:Wie um herauszufinden, was das Basismodell für eine rekursive Quadratwurzel Programm zum Erraten
Die folgende Methode zu den alten Griechen bekannt war Quadratwurzeln für die Berechnung. Bei einem Wert x> 0 und einem Schätzwert g für die Quadratwurzel ist eine bessere Schätzung (g + x/g)/2. Schreibe eine rekursive Hilfsmethode public static squareRootGuess (double x, double g). Wenn g^2 ungefähr gleich x ist, gebe g zurück, andernfalls richte squareRootGuess mit der besser ein. Schreiben Sie dann eine Methode public static squareRoot (double x) , die die Hilfsmethode verwendet.
Ich bin mir nicht sicher, was ich hier tun soll. Ich glaube nicht, dass mein Base Case für diese Funktion korrekt ist. Ich habe kein gutes Verständnis dafür, was genau das Problem verlangt.
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);
}
}
}
Update:
Ich habe meine Basisfall festgelegt. Mein Code ist jetzt wie folgt:
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);
}
}
}
Fortsetzung auf für das Problem, ist meine Logik korrekt für die Else-Anweisung? Ich glaube nicht, dass es ist, wenn ich einen Stapelüberlauffehler erhalte.
Es heißt in dem Text, den Sie geschrieben, wenn Sie g zurückgeben sollte 'Wenn g^2 ungefähr gleich x ist, kehren g' – JackVanier
So einfach es ist' if (x == Math.sqrt (2.0)) ; '? – Matt
Sie sagten ungefähr gleich, also würde ich 'if tun (Math.abs (Math.sqrt (x) - g) <0.001)' – 4castle