当前位置: 首页 > 知识库问答 >
问题:

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

弘靖琪
2023-03-14

出于某种原因,我一直在试图编译这段代码时出错,但似乎一切都正常,对吗?

导入java。util.*;公共类平方根{public static 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);
}
}
}

共有1个答案

范金鑫
2023-03-14

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

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

你需要缓存new猜测ther的开头,做你的计算,然后用new猜测中缓存的值替换old猜测

像这样:

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

 类似资料:
  • 我编写了以下代码来实现BST的递归插入方法。但是当我以遍历顺序打印树时,它会在插入之前打印原始树。似乎没有插入元素。请帮帮我。提前谢谢。另外,请建议更改代码。顺便说一下,初始树的遍历顺序是2 5 6 7 8。

  • 问题内容: 我有以下代码: 我希望它能打印a = 2 b = 1,但它却打印相反的东西。因此很明显,swap方法不会交换a和b值。为什么? 问题答案: 这与整数的不变性无关。它与 Java是值传递 ,该死 的事实有关! (不烦恼,只是文章标题:p) 总结一下:您实际上不能在Java中创建交换方法。您只需要在需要的地方自己进行交换即可。反正这只是三行代码,所以应该不成问题:)

  • 问题内容: 这段代码有什么问题: 问题答案: 三元运算符不能有不返回值或方法的语句。您需要具有返回值的语句。 您需要重写它。

  • 输入是:1。硬币中一定数量货币的总重量,2。旧货币硬币的价值和相应重量。 目标是找到给定金额货币的最低可能货币价值。 我的方法是按货币的价值/重量比升序对硬币进行排序,然后贪婪地将第一枚硬币的重量尽可能多地匹配到总和中(跟踪它匹配的次数),然后匹配将第二枚硬币的重量尽可能多次地放入余数中,等等,对于所有硬币或直到余数为零(如果不是,情况是不可能的)。 法官说我的答案是错误的。你能给我一个关于算法错

  • 这是一个交集方法,在该方法中,我应该返回一个包含列表和中所有相同元素的列表,但该程序正在无限循环,并且该方法中唯一的循环可以无限循环,所以我不明白它为什么不工作。 和方法工作非常好。 我更新了代码,我认为它会起作用,但现在在toString方法的行中出现了另一个错误。这是一个空指针异常,但为什么它是一个错误?

  • 我了解碰撞检测的基础,并开发了我自己的碰撞检测方法(据我所知)。然而,这似乎并不奏效。我所做的不是围绕精灵、形状和其他对象绘制完整的矩形,而是简单地在对象的所有边(左、右、上、下)绘制线条(非常细的矩形)。 在指定子画面的左侧、右侧、顶部和底部绘制细矩形的方法。这可能不是进行碰撞的最佳方式,但这就是我所拥有的,并且对所有想法和不同的解决方案持开放态度! 注:(int)(x-Game.getCame