function permutation ($array) { function sign($A) { $size = $A.Count $sign = 1 for($i = 0; $i -lt $size; $i++) { for($j = $i+1; $j -lt $size ; $j++) { if($A[$j] -lt $A[$i]) { $sign *= -1} } } $sign } function generate($n, $A, $i1, $i2, $cnt) { if($n -eq 1) { if($cnt -gt 0) { "$A -- swapped positions: $i1 $i2 -- sign = $(sign $A)`n" } else { "$A -- sign = $(sign $A)`n" } } else{ for( $i = 0; $i -lt ($n - 1); $i += 1) { generate ($n - 1) $A $i1 $i2 $cnt if($n % 2 -eq 0){ $i1, $i2 = $i, ($n-1) $A[$i1], $A[$i2] = $A[$i2], $A[$i1] $cnt = 1 } else{ $i1, $i2 = 0, ($n-1) $A[$i1], $A[$i2] = $A[$i2], $A[$i1] $cnt = 1 } } generate ($n - 1) $A $i1 $i2 $cnt } } $n = $array.Count if($n -gt 0) { (generate $n $array 0 ($n-1) 0) } else {$array} } permutation @(1,2,3,4)