###### tags: `競プロ` # 順列生成の実装 ```python= import sys from copy import deepcopy def perm(head :list ,rest :list,result :list): if len(rest) == 0: # restを消費仕切ったら、結果に渡してあげる result.append(head) return for r in rest: # restからひとつ削ったrestxを生成 restx = deepcopy(rest) restx.remove(r) # head に restから取り出した値を追加する headx = deepcopy(head) headx.append(r) perm(headx,restx,result) def main(): N = int(input()) # 結果用のリストを渡さないといけない res = [] perm([],[i for i in range(1,N+1)],res) # こうしたい res = perm([],[i for i in range(1,N+1)]) print(res) if __name__ == '__main__': main() ``` Hackyな方法としてはこんなのを一つ ```python import sys from copy import deepcopy def _perm(head: list, rest: list, result: list): if len(rest) == 0: # restを消費仕切ったら、結果に渡してあげる result.append(head) return for r in rest: # restからひとつ削ったrestxを生成 restx = deepcopy(rest) restx.remove(r) # head に restから取り出した値を追加する headx = deepcopy(head) headx.append(r) _perm(headx,restx,result) # サブっぽい関数に全部任せる def perm(source: list) -> list: res = [] _perm([], source, res) return res def main(): N = int(input()) res = perm(list(range(1,N+1))) print(res) if __name__ == '__main__': main() ```