【问题标题】:Why is this recursive method on guessing the square root of a user inputted number not working为什么这种猜测用户输入数字平方根的递归方法不起作用
【发布时间】:2021-05-26 02:12:24
【问题描述】:

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

导入 java.util.*; 公共类 squareRoot { 公共静态无效输入(){

     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);
}
}
}

【问题讨论】:

标签: java recursion


【解决方案1】:

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

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

您需要在else 的开头缓存newguess,进行计算,然后将oldguess 替换为newguess 中的缓存值。

像这样:

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);
    }
}

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 2023-03-17
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多