没错!无法使用java.lang.StackOverflowError找到解决方案

时间:2016-04-04 06:59:16

标签: java recursion newtons-method

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

请有人帮我解决这个问题。我已经厌倦了多次这样做。

2 个答案:

答案 0 :(得分:3)

您永远不会更改rootnum,并且在每次调用guess时重置guess= num/(root+1);,这样您就会获得无休止的递归,从而导致StackOverflowError

我不确定正确的逻辑应该是什么,但为了防止无休止的递归,您必须为每个递归调用传递rootnum的不同值,或者不要重置{ {1}}在方法的开头。

答案 1 :(得分:0)

我自己得到了答案。要求猜测将解决问题。不需要像我给出的代码那样设置猜测。但是,我不知道原因,但它解决了这个问题。谢谢。