class DebugMe { /** Prints the value of a geometric series. */ public static void main( String[] argv ) { int N = 3; ListNode geomSeries = createGeomSeries( 1/2, N ); double sum = listSum( geomSeries ); System.out.println( "for N == " + N + ",\n" ); System.out.println( " N | 1 |^i" ); System.out.println( " sum |---| = " + sum ); System.out.println( " i=0 | 2 |\n" ); } /** * Creates a list built from ListNodes in which each item * is one term in the geometric series: * * N * sum (r^i) * i=0 * * @param r is the base of the geometric series. * @param N maximum exponent of the geometric series, which * is assumed to be non-negative. */ public static ListNode createGeomSeries( double r, int N ) { ListNode newTerm = new ListNode(null, null); if( N == 0 ) { newTerm.item = new Double(1.0); newTerm.next = null; } else { newTerm.next = createGeomSeries( r, N - 1 ); newTerm.item = new Double(((Double) newTerm.next.item).doubleValue() * r); } return newTerm; } /** * Computes the sum of terms in a list. * @param l is linked list represented by ListNodes, * where each item in the list is assumed to be a Double. */ public static double listSum( ListNode l ) { if( l == null ) return 0.0; return ((Double) l.item).doubleValue() + listSum(l.next); } }