- force tail recursion