public class ImprovedDigitsRecursion { public static void main(String args[]){ int x = 7312; System.out.print(x+" = "); printInteger(x, 0); System.out.println(""); } static void printInteger(int x, int level){ if(x == 0) return; printInteger(x / 10, level+1); if(level >= 2 && x % 10 != 0){ printDigit(x % 10); printOrder(level); }else if(level == 1){ if(x % 10 >= 2) printSecond(x % 10); }else{ if(x % 100 < 20) printTeens(x % 100); else printDigit(x % 10); } } static void printOrder(int x){ if(x == 3) System.out.print("thousand "); else if(x == 2) System.out.print("hundred "); else System.out.print("* "); } static void printTeens(int x){ if(x < 10){ printDigit(x); return; } switch(x){ case 10: System.out.print("ten "); break; case 11: System.out.print("eleven "); break; case 12: System.out.print("twelve "); break; case 13: System.out.print("thirteen "); break; case 14: System.out.print("fourteen "); break; case 15: System.out.print("fifteen "); break; case 16: System.out.print("sixteen "); break; case 17: System.out.print("seventeen "); break; case 18: System.out.print("eighteen "); break; case 19: System.out.print("nineteen "); break; default: System.out.print("* "); } } static void printSecond(int x){ switch(x){ case 0: //System.out.print("zero "); break; case 1: System.out.print("* "); break; case 2: System.out.print("twenty "); break; case 3: System.out.print("thirty "); break; case 4: System.out.print("forty "); break; case 5: System.out.print("fifty "); break; case 6: System.out.print("sixty "); break; case 7: System.out.print("seventy "); break; case 8: System.out.print("eighty "); break; case 9: System.out.print("ninety "); break; default: System.out.print("* "); } } static void printDigit(int x){ switch(x){ case 0: //System.out.print("zero "); break; case 1: System.out.print("one "); break; case 2: System.out.print("two "); break; case 3: System.out.print("three "); break; case 4: System.out.print("four "); break; case 5: System.out.print("five "); break; case 6: System.out.print("six "); break; case 7: System.out.print("seven "); break; case 8: System.out.print("eight "); break; case 9: System.out.print("nine "); break; default: System.out.print("* "); } } }