今年の夏、コンピュータプログラミングの講習会に参加する機会を得た。今まで、コンピ
ュータがあって、ソフトがあって、ただそれらを使いこなせればいいや、と思っていたが、講
習会に参加して、考えを新たにした。もちろん、以前パソコンがまだ発展途上で、OSもMS
−DOSの時代、BASIC言語でプログラムを書き、仕事に遊びに活用していた。OSの進化
とプログラム開発言語の多様化とともに、だんだんプログラミングとは無縁の生活となって
しまった。
講習会の主テーマであった再帰的プログラムに特に心をひかれた。これは、Excel
におけ
るVBAの活用に的を絞ったものだが、自分流の関数が作れる事に妙味を覚えた。
例えば、異なるN個のものから、異なるK個を選ぶ順列の数の計算は、Excelの関数を熟
知していれば、単に、セルに「=FACT(N)/FACT(N−K)」と打ち込んで、済ますことだろ
う。これが、再帰的プログラムの考えを用いると、次のように新しく関数を定義することがで
きる。
Visual Basic Editor を起動させて、標準モジュールに下記を記述する。
Function perm(N As Single, K As Single)
If K = 1 Then
perm = N
Else
perm = N * perm(N - 1, K - 1) ← 再帰的プログラム
End Function
Excel の画面で、適当なセルに「=perm(5,3)」と打ち込んでEnterキーを押すと、値 60 が
返される。
再帰的プログラムは、数列の漸化式と同じ発想で作られる。例えば、上の例は次のように
考えられる。
異なるn個のものから、異なる k 個を選ぶ順列の総数を an,k とする。
1番目の選び方は、n通りで、その1通りに対して、残り n−1 個から k−1
個選ぶ順列の
数は、an-1,k-1 通りである。従って、an,k=n×an-1,k-1 が成り立つ。
これはまさしく、「perm = N * perm(N - 1, K - 1)」である!
また、「 If K = 1 Then perm = N」は、漸化式では、am,1=m に相当している。
このように考えると、再帰的プログラムがいろいろ簡単に作れそうである。特に、確率過程
のマルコフの鎖的問題に応用してみると、面白い結果が瞬時に得られそうで、楽しみが一つ
増えた気分である。