class SumUp { private int doSumUpT(int w, int x, int y, int z, int sumSoFar) // Tail Recursion { int sum; if (w > x) { sum = sumSoFar; } else { if( ((w % y) == 0) || ((w % z) == 0) ) { sum = doSumUpT(w+1,x,y,z,sumSoFar+w); } else { sum = doSumUpT(w+1,x,y,z,sumSoFar); } } return(sum); } public int sumUpT(int w,int x,int y, int z) // Wrapper { return( doSumUpT(w, x, y, z, 0) ); } public int sumUpNT(int w,int x,int y, int z) // Wrapper { return( doSumUpNT(w, x, y, z) ); } public int doSumUpNT(int w, int x, int y, int z) { int times = 0; if (w > x) { } else { if( ((w % y) == 0) || ((w % z) == 0) ) { times = 1 + doSumUpNT(w + 1, x, y, z); } else { times = doSumUpNT(w + 1, x, y, z); } } return times; } } // end class