Recursion -- A Summary (1) Easy to code up when the intrinsic recursiveness is seen: n! fib(n) ack(m, n) length (list) print (list) postfix(tree) (2) For concurrency, recursion is good because each function call causes a separate stack frame, so that data is protected from uncontrolled access. (3) Recursion is usually more expensive in performance: It takes longer to push/pop stack frames than to iterate. (4) To improve performance of recursion: a) Rewrite to iterative implementation b) Convert to tail recursion if possible. The compiler can optimize tail recursion. c) Memo-ize