Implement tailrec