为什么这种猜测用户输入数字平方根的递归方法不起作用



由于某种原因,我在编译这段代码时不断出错,但似乎一切都正常,对吧?

导入java.util.*;公共类平方英尺{公共静态void input(({

Scanner input = new Scanner (System.in);  
double number = 16;
double root;
root = square(number);
System.out.println("Enter Guess");
double oldguess = input.nextDouble();
squareRoot(0, oldguess);
}
public static double square(double number){
double t;
double squareroot = number / 2;
do {
t = squareroot;
squareroot = (t + (number / t)) / 2;
} while ((t - squareroot) != 0);
return squareroot;}

public static double squareRoot(double newguess, double oldguess){
if (newguess == square(19)){
return newguess;
}
else{
newguess = (oldguess + (19/oldguess))/2;
System.out.println(newguess);
return squareRoot(newguess, oldguess);
}
}
}

因为oldguess是一个常数。因此,在第一次运行之后,此代码每次都会产生相同的结果:

newguess = (oldguess + (19/oldguess))/2;

您需要在else开始时缓存newguess,进行计算,然后用newguess中的缓存值替换oldguess

像这样:

public static double squareRoot(double newguess, double oldguess) {
double cache;
if (newguess == square(19)) {
return newguess;
} else {
cache = newguess;
newguess = (oldguess + (19 / oldguess)) / 2;
oldguess = cache;
System.out.println(newguess);
return squareRoot(newguess, oldguess);
}
}

最新更新