class ListNode { double item; ListNode next; } class DebugMe { 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" ); } /** * pre : N >= 0 * * post : returns a linked-list where each node contains * one of the terms in the geometric sum: * * N * sum (r^i) * i=0 */ public static ListNode createGeomSeries( double r, int N ) { ListNode newTerm = new ListNode(); if( N == 0 ) { newTerm.item = 1.0; newTerm.next = null; } else { newTerm.next = createGeomSeries( r, N - 1 ); newTerm.item = newTerm.next.item * r; } return newTerm; } /** * post : computes the sum of terms in a list */ public static double listSum( ListNode l ) { if( l == null ) return 0.0; return l.item + listSum(l.next); } } // eof