tailrec annotation