static String[] permute (String str) { if (str.length() < 2) { String[] rekursionsende = { str }; return rekursionsende; } else { String permutiert[] = new String[fakultaet(str.length())]; // Fuer "ab" laeuft diese Schleife 2 Mal - dadurch wird garantiert // jedes Element des Rückgabe-Arrays mit irgendwas gefuellt. for (int m = 0; m<permutiert.length;) { // Fuer "ab" 2-maliger Durchlauf. Im 1. Durchlauf ist s_fixchar // "a", im 2. "b". // Nach Aufruf von permute("b") ist str.length=1 und b wird // sofort zurueckgegeben (siehe oben). Also erhoeht sich n nun // für str = "ab" auf 1. Dadurch wird s_fixchar = "b". // UND WOHER KOMMT NUN A???? for (int n = 0; n < str.length(); n++) { String s_fixchar = str.substring(n,n+1); String s_restchar = str.substring(0,n)+str.substring(n+1); String[] zw = permute(s_restchar); // Im ersten Durchlauf ist zw.length = 1. Also perm[0]=a+b for (int k=0; k<zw.length; k++) { permutiert[m] = s_fixchar + zw[k]; m++; } } } return permutiert; } }