【发布时间】:2015-03-02 20:32:22
【问题描述】:
我必须编写一个程序来返回输入的任何数字的平方根。我的方法适用于任何具有完美平方的数字(如 25 或 100),但如果我使用任何不完美的数字(3 或 10),则会出现堆栈溢出错误。我希望有人能告诉我我做错了什么以及如何解决它。
public boolean sqrRootRecursive(int number, double approx, double tol)
{
if( (Math.abs((Math.pow(approx,2) - number))<= tol))
{
System.out.println("The root is " +approx);
}else if (Math.abs((Math.pow(approx,2)-number))>tol)
{
sqrRootRecursive(number, ((Math.pow(approx,2)+number)/(2*approx)), tol);
}
return true;
感谢您的帮助!
【问题讨论】:
-
什么是 approx 和 tol?
-
不需要你的第二个
if:如果(Math.abs((Math.pow(approx,2) - number))<= tol))为假,那么肯定Math.abs((Math.pow(approx,2)-number))>tol -
我不记得这个算法是如何工作到足以发现问题的,但我建议您在递归步骤之前添加一个调试行,以便您可以观察递归并尝试找到您的错误。
-
和stackoverflow.com/questions/28781485/…一样的问题:应该是
(Math.abs((Math.pow(approx,2) - number))<= tol*number) -
如果@Soma Turi 在你的教室里......告诉他发现他的question:他认为将
float更改为double解决了他的问题,但事实并非如此...
标签: java recursion square-root