Section 19 の説明のとおりプログラムを書こうとすると 分かりにくい人が少なからずいるようなので, もう少し分かりやすい アルゴリズムを紹介する.
(例 から
を抜くと
)
(上の場合,
.)
(上の場合,
となる.)
Section 19 ではリストの 番目に要素を挿入する関数が
必要であった. ここでの方法ではリストの
番目を抜く関数が必要となる.
どちらもほとんど同様なので, 例えば後者を考える. これは, 例えば
重なった
枚の紙があったとして, その上から
番目の紙を抜き出す
場合を考えればなにをすればよいか分かると思う. くどいのを承知で説明
すると
いずれにしても, 再帰で書くことになるが, 注意すべき点は, 再帰の終点
をどこにするかである. の長さが 1 の場合に終点とすれば分かりやすい.
この場合
なら
を返すようにすればよい. (結果は
順列 (リスト) のリストとなることに注意.)
を終点とすること
もできるが, この場合
(空リストを要素とするリスト) を返す
必要がある. こうしないと, 再帰が進まない.