decurse

An abstraction over continuation-passing and trampolining to write recursive functions that don't exceed the maximum call stack size.