Passer par toutes les permutations d'un ensemble récursivement

Je suis en train d'écrire une fonction récursive pour produire toutes les permutations d'un tableau.

static int permus[] = new int[] { 1, 2, 3, 4, 5 };


static void testPermu(int start)
{
    //Print it
    System.out.println(Arrays.toString(permus));

    int k;
    for (int i = start + 1; i < permus.length; i++) {
        //swap
        k = permus[start];
        permus[start] = permus[i];
        permus[i] = k;

        testPermu(i);

        //unswap
        k = permus[start];
        permus[start] = permus[i];
        permus[i] = k;
    }
}

Il est invoqué comme testPermu(0) et devrait produire toutes les permutations, cependant cela ne fonctionne pas. Comment puis-je résoudre ce problème?

Il doit être récursive, chaque fois que la fonction est appelée, elle doit obtenir une nouvelle permutation.

de sortie est maintenant

[1, 2, 3, 4, 5] 
[2, 1, 3, 4, 5] 
[2, 3, 1, 4, 5] 
[2, 3, 4, 1, 5] 
[2, 3, 4, 5, 1] 
[2, 3, 5, 4, 1] 
[2, 4, 3, 1, 5] 
[2, 4, 3, 5, 1] 
[2, 5, 3, 4, 1] 
[3, 2, 1, 4, 5] 
[3, 2, 4, 1, 5] 
[3, 2, 4, 5, 1] 
[3, 2, 5, 4, 1] 
[4, 2, 3, 1, 5] 
[4, 2, 3, 5, 1] 
[5, 2, 3, 4, 1] 

Vous pouvez voir que beaucoup de permutations sont manquants.

Je vais écrire en Java, mais je vais comprendre, par exemple en C, javascript ou autre chose tant qu'il ne l'utilise pas certains de la bibliothèque de trucs, non disponible en Java.

Voir ici. Je voudrais essayer de le modèle de mon code par la suite. Je ne suis pas sûr, mais je pense que vos problèmes pourraient être découlant de l'utilisation d'un unique tableau statique.
Je suis tout à fait certain que l'exemple que vous avez lié utilise également le même tableau de partout, c'est passé par référence. Je vais essayer de copier cette approche (qui semble être en grande partie le même que le mien :D)
Dans ce cas, votre question doit être marqué comme un doublon.

OriginalL'auteur MightyPork | 2015-03-01