Factorial
if n ≤ 1 return n // naive recursion return n * Fact(n-1)
Accumulating Factorial
if n ≤ 1 return acc // no tail call optimization return Fact(n-1, acc*n)
Tail Call Factorial
if n ≤ 1 return acc // tail call optimization! return Fact(n-1, acc*n)