lightweight mutual tail recursion optimization without trampoline