Tail Recursion
fac(4) => f
1
(1, 4, 1) => f
1
(1, 4, 2) => f
1
(2, 4, 3) => f
1
(6, 4, 4) => f
1
(24, 4, 5) => 24
fac(n) = n <= 1 ? 1 : n*fac(n-1);
f
1
(a, n, x) = x <= n ?
f
1
(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) = f
1
(1, n, 1);
sticky build-up