Tail Recursion
fac(4) => f1(1, 4, 1) => f1(1, 4, 2) => f1(2, 4, 3) => f1(6, 4, 4) => f1(24, 4, 5) => 24

fac(n) = n <= 1 ? 1 : n*fac(n-1);
f1(a, n, x) = x <= n ?           f1(a*x, n, x+1)
      : a;
tail-recursive
non-tail-recursive
fac(4) => 4*fac(3) => 4*3*fac(2) => 4*3*2*fac(1)=> 4*3*2*1=>4*3*2 => 4*6 => 24

fac(n) = f1(1, n, 1);
sticky build-up