Recursive List Design Pattern
(defun fn (lst) (if (null lst) ; test for base case baseanswer ; answer for base case (some-combination-of (something-about (first lst)) (fn (rest lst))) ) ) ; recursive call
public int fn (Cons lst) { if ( lst == null ) return baseanswer; else return someCombinationOf( somethingAbout(first(lst)), fn(rest(lst))); }
The recursive version is often short and elegant, but it has a potential pitfall: it requires O(n) stack space on the function call stack. Many languages do not provide enough stack space for 1000 calls, but a linked list with 1000 elements is not unusual.