Benchmark: timing 1000 iterations of direct, iterate, recurse... direct: 1 wallclock secs ( 1.68 usr + 0.00 sys = 1.68 CPU) @ 595.24/s (n=1000) iterate: 10 wallclock secs ( 9.57 usr + 0.00 sys = 9.57 CPU) @ 104.49/s (n=1000) recurse: 9 wallclock secs ( 9.54 usr + 0.00 sys = 9.54 CPU) @ 104.82/s (n=1000) Rate iterate recurse direct iterate 104/s -- -0% -82% recurse 105/s 0% -- -82% direct 595/s 470% 468% --