title: Exception in thread "main" java.lang.StackOverflowError
body: <p>I have a piece of code and I could not figure out why it is giving me Exception in thread "main" java.lang.StackOverflowError. </p>
  
  <p>This is the question: </p>
  
  <pre><code>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.
  </code></pre>
  
  <p>My Code: </p>
  
  <pre><code>import java.util.HashMap;
  
  public class Test {
  
  HashMap&lt;Integer,Integer&gt; syraSumHashTable = new HashMap&lt;Integer,Integer&gt;();
  
  public Test(){
  
  }
  
  public int lengths(int n)throws IllegalArgumentException{
  
      int sum =0;
  
      if(n &lt; 1){
          throw new IllegalArgumentException("Error!! Invalid Input!");
      }   
  
      else{
  
  
          for(int i =1; i&lt;=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) ;
  
              }
  
      }
  
  
  }
  }
  </code></pre>
  
  <p>Driver code: </p>
  
  <pre><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));
  }
  </code></pre>
  
  <p>. 
  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. :)</p>
  
  <p>I almost forgot the error msg:</p>
  
  <pre><code>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)
  </code></pre>