import java.util.*;
public class NRootx {
public static Double NRmethod (Double num, int root, Double guess){
guess= num/(root+1); //first guess
Double guess_output=1.0;
for (int i=1;i<=root; i++)
{
guess_output *= guess;
}
Double error= guess_output-num;
error = error * 0.001;
guess = guess - error;
if (Math.abs(error)>=0.000001)
return NRmethod(num, root, guess); //Recursion
else
return guess;
//I can't find out the problem now. Java.lang.StackOverFlow error is showing.
}
}
}
// Main function
public static void main(String[] args) {
Double x;
int n;
Scanner sc= new Scanner (System.in);
System.out.println("Enter the value of x: ");
x=sc.nextDouble();
System.out.println("Enter the value of n: ");
n=sc.nextInt();
Double guess=x/(n+1);
Double ans= NRmethod(x,n,guess);
System.out.println("The value of y is ="+ans);
}
请有人帮我解决这个问题。我已经厌倦了多次这样做。
答案 0 :(得分:3)
您永远不会更改root
和num
,并且在每次调用guess
时重置guess= num/(root+1);
,这样您就会获得无休止的递归,从而导致StackOverflowError
我不确定正确的逻辑应该是什么,但为了防止无休止的递归,您必须为每个递归调用传递root
或num
的不同值,或者不要重置{ {1}}在方法的开头。
答案 1 :(得分:0)
我自己得到了答案。要求猜测将解决问题。不需要像我给出的代码那样设置猜测。但是,我不知道原因,但它解决了这个问题。谢谢。