//BadRecursions.java public class BadRecursions { static int callCounter=0; public static void main (String[] args) { System.out.println ("main calling inf_recurse"); //inf_recurse(5); //inf_recurse2(5); inf_recurseCount(5); } //BAD: no base case --> infinite recursion static void inf_recurse (int x) { System.out.println("inf_recurse x= " + x); inf_recurse(x-1); } //BAD: no smaller version --> infinite recursion static void inf_recurse2 (int x) { if (x > 0) { System.out.println("inf_recruse2 x= " + x); inf_recurse2(x); } } //same as inf_recurse2 but with counter to see JVM termination static void inf_recurseCount (int x) { if (x > 0) { callCounter++; //only output every 1000 calls if (callCounter % 1000 == 0) System.out.println("inf_recurseCount counter= " + callCounter); inf_recurseCount(x); } } }