Generowanie rekurencyjnie wszystkich możliwych permutacji listy

Próbuję rekurencyjnie generować rekurencyjnie wszystkie elementy na liście. Widziałem kilka rozwiązań podobnych pytań, ale nie udało mi się uruchomić mojego kodu. Czy ktoś mógłby wskazać, jak mogę naprawić mój kod?

To jest otwarte dla wszystkich S / O'ers, a nie tylko dla ludzi z Jawy.

(Powinienem też zauważyć, że ulega awarii z wyjątkiem SO).

Przykładowy wpis: [1, 2, 3]

Wynik: [1, 2, 3] [1, 3, 2] [2, 1, 3] [2, 3, 1] [3, 1, 2] [3, 2, 1]

<code>//allPossibleItems is an AL of all items 

//this is called with generatePerm(null, new ArrayList<Item>);

private void generatePerm(Item i, ArrayList<Item> a) {
      if(i != null) { a.add(i); }
      if (a.size() == DESIRED_SIZE){
          permutations.add(a);
          return;
      }
      for(int j = 0; j < allPossibleItems.size(); j ++) {
          if(allPossibleItems.get(j) != i)
            generatePerm(allPossibleItems.get(j), a);
      }
  }
</code>

questionAnswers(4)

yourAnswerToTheQuestion