trampoline all recursive functions to avoid blowing the stack