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