Ich versuche, meinen Kopf um, wie diese Permutation Algorithmus funktioniert zu bekommen:Dissecting eine Permutation Algorithmus in Python
def perm(n, i):
if i == len(n) - 1:
print n
else:
for j in range(i, len(n)):
n[i], n[j] = n[j], n[i]
perm(n, i + 1)
n[i], n[j] = n[j], n[i] # swap back, for the next loop
perm([1, 2, 3], 0)
Ausgang:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
Frage
Wie kommt es, dass die ursprüngliche Liste ist die erste Linie gedruckt?
In diesem Beispiel ist die Länge n
3. Anfangs i
ist 0. Der Code sollte die if
Anweisung überspringen, und dann mutiert die erste Iteration die Liste. Wie erhalten wir [1, 2, 3]
als erste Zeile der Ausgabe?
Ich würde vorschlagen, mit einem Debugger oder es durch http://pythontutor.com/ läuft – jonrsharpe
Sind Sie sicher, dass es nicht in der Druck 'else'? – Carcigenicate
Sehen Sie sich genau an, was es bei der ersten Iteration austauscht. Sind Sie sicher, dass Iteration * wirklich * die Liste ändert? – user2357112