Permutations by swapping: Difference between revisions

→‎Python: recursive: unrolled the recursion
(→‎Python: recursive: unrolled the recursion)
Line 307:
Perm: (1, 0, 2, 3) Sign: -1</pre>
 
===Python: recursivesimpler===
After spotting the pattern of highest number being inserted into each perm of lower numbers from right to left, then left to right, I developed this recursivesimpler iterative function:
<lang python>def s_permutations(n):
def s_perm(items): = [[]]
for j in if items <= 0range(n):
new_items = return [[]]
elsefor i, item in enumerate(items):
new_itemsif =i []% 2:
for i, item in enumerate(s_perm(items# -step 1)):down
ifnew_items += [item[:i] %+ 2[j] + item[i:] \
# step down for i in range(len(item), -1, -1)]
return new_itemselse:
new_items += [item[:i] + [items - 1] + item[i:] \
# step for i in range(len(item), -1, -1)]up
elsenew_items += [item[:i] + [j] + item[i:] \
# step up for i in range(len(item) + 1)]
items = new_items += [item[:i] + [items - 1] + item[i:] \
for i in range(len(item) + 1)]
return new_items
 
return [(tuple(item), -1 if i % 2 else 1)
for i, item in enumerate(s_perm(n)items)]</lang>
 
;Sample output:
Anonymous user