def permutazioni(L, livello): print(' '*livello, "entering", L) if len(L) == 1: ris = [ L ] print(' '*livello, "exit ->", ris) return ris else: ris = [] for i in range(len(L)): el = L[i] resto = L[:i] + L[i+1:] perm = permutazioni(resto, livello+1) for p in perm: ris.append([el]+p) print(' '*livello, "exit ->", ris) return ris from pprint import pprint if __name__ == '__main__': pprint(permutazioni([1,2,3], 0))