ない数字を選んでいきます。つめの数字を選びます。回の再帰呼び出しに対応するわけです。選んだ数字の個数をカウントします。番目の再帰呼び出しに戻ります。選んだ数字を削除して新しい数字を選びます。番目の数字を選び直します。順列をすべて生成することができます。それでは実行してみましょう。通りの順列をすべて求めることができます。●順列を配列に格納する生成した順列を配列に格納して返す場合は、累積変数を使うと簡単です。累積変数で、ここに生成した順列をセットします。追加して順列を生成します。このとき、新しい配列が生成されることに注意してください。取り除く必要はありません。それでは実行してみましょう。1]]このように、順列をリストに格納して返すこともできます。再帰を使った面白い関数を紹介しましょう。次のリストを見てください。「たらいまわし関数」といって、再帰的に定義されている関数です。ベンチマークとして利用されることがあります。ある竹内郁雄先生によって考案されたそうです。先生によって作成されたそうです。たらいまわし関数がベンチマークで使われていることは知っていましたが、このような由緒ある関数だとは思ってもいませんでした。以降は高速に実行できるようになりました。スクリプト言語の中では速いほうだと思います。たらいまわし関数のような再帰関数は、一度計算した値を覚えておいて、同じ計算を何度も繰り返さないように工夫すると高速に実行することができます。このような手法を「表計算法」とか「メモ化」といいます。「遅延評価」を行うと高速に実行することができます。遅延評価で高速化することはできません。●おわりに再帰定義について簡単に説明しました。はじめのうちは難しく感じるかもしれませんが、簡単なプログラムをいくつか作ってみてください。そのうちに、再帰定義に慣れてくると思います。簡単なところでは累乗の計算とか組み合わせの生成、またはバックトラック法でパズルを解いてみるのも面白いと思います。特徴であるイテレータとブロックを取り上げます。その応用例として高階関数について説明します。