Let s(k,n) be the number of swaps done when
perm is invoked
as perm(a, k, n). s(k,n) = 0
when k = n and
(n - k + 1)(2 + s(k+1, n)) when
k < n. Using repeated substitution,
we get
s(1,n) = 2n + 2n(n - 1) + 2n(n - 1)(n - 2) + ... +
2n(n - 1)(n - 2) ... 2
= 2n! [sum from (i=1) to (n-1) (1 / (i!))]