Function permutohedron::heap_recursive [] [src]

pub fn heap_recursive<T, F, C>(xs: &mut [T], f: F) -> C where
    F: FnMut(&mut [T]) -> C,
    C: ControlFlow

Heap's algorithm for generating permutations, recursive version.

The recursive algorithm supports slices of any size (even though only a small number of elements is practical), and is generally a bit faster than the iterative version.

The closure f may return either () to simply run through all permutations, or a Control value that permits breaking the iteration early.

use permutohedron::heap_recursive;

let mut data = [1, 2, 3, 4, 5, 6];
let mut permutations = Vec::new();
heap_recursive(&mut data, |permutation| {
    permutations.push(permutation.to_vec())
});

assert_eq!(permutations.len(), 720);