- %% CLOSED-FORM DERANGEMENT
- function d = derangements(n)
- numerator = (ones(1,n+1)*-1).^(0:n);
- denomerator = arrayfun(@factorial, 0:n);
- factorial_terms = numerator ./ denomerator;
- d = sum(factorial(n) * factorial_terms)
- %% RECURSIVE DERANGEMENT
- function der = deraangements_rec(n)
- der = NaN(1,n);
- for m=0:n
- d = factorial(m);
- for k=1:m
- d = d- nchoosek(m,k)*der(m-k+1);
- end
- der(m+1) = d;
- end
- der = sum(der);