tail recursion optimization is suitable when after...
# announcements
i
tail recursion optimization is suitable when after recursive call you don't need any state from the current stackframe, so it can be discarded entirely