Simplifying Using Substitution
fac(n) = f
1
(1, n, 1);
f
1
(a, n, x) = x <= n ?
f
2
(a, n, x)
: a;
f
2
(a, n, x) = f
1
(a*x, n, x+1);
f
1
(a, n, x) = x <= n ?
f
1
(a*x, n, x+1)
: a;