Exception in thread "main" java.lang.StackOverflowError
- by Ray.R.Chua
I have a piece of code and I could not figure out why it is giving me Exception in thread "main" java.lang.StackOverflowError. 
This is the question: 
Given a positive integer n, prints out the sum of the lengths of the Syracuse 
sequence starting in the range of 1 to n inclusive. So, for example, the call:
lengths(3)
will return the the combined length of the sequences:
1
2 1
3 10 5 16 8 4 2 1 
which is the value: 11. lengths must throw an IllegalArgumentException if 
its input value is less than one.
My Code: 
import java.util.HashMap;
public class Test {
HashMap<Integer,Integer> syraSumHashTable = new HashMap<Integer,Integer>();
public Test(){
}
public int lengths(int n)throws IllegalArgumentException{
    int sum =0;
    if(n < 1){
        throw new IllegalArgumentException("Error!! Invalid Input!");
    }   
    else{
        for(int i =1; i<=n;i++){
            if(syraSumHashTable.get(i)==null)
            {
                syraSumHashTable.put(i, printSyra(i,1));
                sum += (Integer)syraSumHashTable.get(i);
            }
            else{
                sum += (Integer)syraSumHashTable.get(i);
            }
        }
        return sum;
    }
}
private int printSyra(int num, int count){
    int n = num;
    if(n == 1){
        return count;
    }
    else{   
            if(n%2==0){
                return printSyra(n/2, ++count);
            }
            else{
                return printSyra((n*3)+1, ++count) ;
            }
    }
}
}
Driver code: 
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Test s1 = new Test();
    System.out.println(s1.lengths(90090249));
    //System.out.println(s1.lengths(5));
}
. 
I know the problem lies with the recursion. The error does not occur if the input is a small value, example: 5. But when the number is huge, like 90090249, I got the Exception in thread "main" java.lang.StackOverflowError. Thanks all for your help. :)
I almost forgot the error msg:
Exception in thread "main" java.lang.StackOverflowError
at Test.printSyra(Test.java:60)
at Test.printSyra(Test.java:65)
at Test.printSyra(Test.java:60)
at Test.printSyra(Test.java:65)
at Test.printSyra(Test.java:60)
at Test.printSyra(Test.java:60)
at Test.printSyra(Test.java:60)
at Test.printSyra(Test.java:60)