function part = next_partition(part) % A partition of n is represented as a row vector, in descending order. % This function returns the next partition of n. if part(1) == 1 part = []; return end n = sum(part); l = length(part); i = l; while part(i) == 1 i = i - 1; end part(i) = part(i) - 1; if part(i) == 1 part(l + 1) = 1; return end left = n - sum(part(1:i)); while left > 0 i = i + 1; part(i) = min(left, part(i - 1)); left = left - part(i); end part = part(1:i);