or rather if it is possible to achieve this easily without having to recurse and check that the number hasn't already been selected.
Implies Sattolo, because otherwise you would need a flag of some sort for every member. Did you miss that?
Possible. I am sorry if I misunderstood, I still think that what is needed is any permutation. I understand that he is talking about how to avoid to have same element appear twice in the result, not that the element should not keep the position where it had been.
The original poster can answer that.
Anyway, for the clarification, with Thaddys example:
If you try the example with [0, 1] it will always return [1, 0].
If you try the code with [0, 1, 2] it will return either [1, 2, 0] or [2, 0, 1]. Out of six possible permutations it will exclude four -- [0, 1, 2], [0, 2, 1], [1, 0, 2], [2, 1, 0].
With the modification I suggested it will return any of the n! possible permutations. Now you can use what you actually need.