Search code examples
javafunctionrecursioninfinity

Java Euler number result infinity


I try to use a recursive function to calculate the Euler number in Java. It's OK when I enter small numbers into this formula:

enter image description here

But when I try to enter a bigger number like 1000 I get infinity. Why it's happening. How I can fix it.

import java.util.Scanner;

public class enumber {
    public static long fact(int a) {
         if(a <= 1) {
             return 1;
         }
         return a * fact(a - 1);
    }

    public static double calculate(int i) {
        double cresult = Math.pow(fact(i), -1);
        if(i == 0 ) {
            return 1;
        }
        return cresult+calculate(i-1);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  
        System.out.println("Enter i value: ");
        int i = sc.nextInt();
        double eresult = calculate(i);
        System.out.println(eresult);
    }
}
 

output;

    Enter i value: 
    1000
    Infinity

Solution

  • I solved that problem by using loops. And for the old algorithm, I changed the fact method type to double. I get rid of Infinity. After that, I face "StackOverflowError". What is a StackOverflowError?

    My new algorithm is;

    import java.util.Scanner;
    
    public class enumber2 {
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            double fact;
            double eNumber = 0;
            int i = in.nextInt();
            
            while(i>0) {
                fact=1;
                for(int j=1; j<=i; j++) {
                    fact = fact * j;
                }
                eNumber = eNumber +(1.0/fact);
                i--;
            }
            eNumber = eNumber +1;
            System.out.println(eNumber);
        }
    
    }
    

    even I enter big numbers after a little bit of patient I'm getting results without exception.