第9講 プロシージャの再帰的使用
第1話 プロシージャの再帰的使用とは?
プロシージャの再帰的使用とは何でしょうか。
それはプロシージャが自分自身を呼び出すことです。
普通は、プロシージャは他のプロシージャが呼び出しますが、
再帰的使用においては、自分が自分を呼び出します。
再帰とは何でしょうか。自己に帰ることです。
繰り返し自己に戻ることが自己再帰です。
では、繰り返しとは何なのでしょうか。
ところで、皆さん、階乗というものを覚えてらっしゃいますか。
5!(5の階乗と読む)なら
5!=1×2×3×4×5
あるいは、高校時代次のように習ったかもしれませんね。
5!=5×4×3×2×1
かけ算ですから、どちらからかけていってもいいわけです。
結局、5!とは1から5まですべてかけたもののことです。
では、皆さん1!、2!、3!、4!、5!、6!、・・・を手で計算してみましょう。
解答は、30行下。
1!=1
2!=1×2=2
3!=1×2×3=6
4!=1×2×3×4=24
5!=1×2×3×4×5=120
6!=1×2×3×4×5×6=720
・
・
・
さて、これを計算していく内に、次のことを発見されたのではないでしょうか。
6!なら1×2×3×4×5×6を計算するのではなく、120×6を計算した方が利口だと。
つまり、6!=5!×6です。
逆順で書くと、
6!=6×5!
5!=5×4!
4!=4×3!
3!=3×2!
2!=2×1!
どの計算も
n!=n×(n−1)!です。
つまり、同じ仕組みをしています。
常に同じ仕組みに戻る!のです。
魔方陣の各セル(枠)も基本的には、同じ仕組みの繰り返しです。
8 | 1 | 6 |
3 | 5 | 7 |
4 | 9 | 2 |
1 | 6 | 11 | 16 |
15 | 12 | 5 | 2 |
8 | 3 | 14 | 9 |
10 | 13 | 4 | 7 |
1 | 7 | 13 | 19 | 25 |
18 | 24 | 5 | 6 | 12 |
10 | 11 | 17 | 23 | 4 |
22 | 3 | 9 | 15 | 16 |
14 | 20 | 21 | 2 | 8 |
魔方陣とは、上の方陣のように各行、各列、各対角線の合計が同じになるものをいいます。
対角線上の方が条件が多いので、対角線上のセルは条件が違いますが、
それ以外のセルは縦の合計と横の合計を一致させなければならないという条件と
1からn×nまでの連続する整数が重複なく入らなければならないという条件の2つの条件が共通しています。
対角線のセルには、それに対角線の合計を一致させるという条件が加わるだけです。
したがいまして、各セルの基本構造(基本条件)は同一です。
階乗における各計算部分n!=n×(n−1)!が同一の構造(条件)をしているように、
魔方陣の各セルも同一の構造(条件)をもっているのです。
数独(ナンバープレイス)もそうです。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
4 | 5 | 6 | 7 | 8 | 9 | 1 | 2 | 3 |
7 | 8 | 9 | 1 | 2 | 3 | 4 | 5 | 6 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 9 | 7 |
3 | 6 | 5 | 8 | 9 | 7 | 2 | 1 | 4 |
8 | 9 | 7 | 2 | 1 | 4 | 3 | 6 | 5 |
5 | 3 | 1 | 6 | 4 | 2 | 9 | 7 | 8 |
6 | 4 | 2 | 9 | 7 | 8 | 5 | 3 | 1 |
9 | 7 | 8 | 5 | 3 | 1 | 6 | 4 | 2 |
各セルは、4つの条件を満たさなければなりません。
@ 1から9までの数字が入る。
A 列の数字が重複してはならない。
B 行の数字が重複してはならない。
C ブロックの数字が重複してはならない。
まさに、ナンバープレイスの場合各セルの構造(条件)はまったく同一です。
よくよく考えてみると、入れ子式構造(同一構造の繰り返し)は自然界や社会や文学界の至る所にあります。
我々人間は、たったひとつの卵細胞が細胞分裂を繰り返し、赤ちゃんになりそして成長し成人になります。
7兆もの細胞から人間は構成されていますが、すべての細胞は同一のDNAをもっています。
そして、どの細胞もちょっとした加工をしてやるとESP細胞、すなわち万能細胞に変えることができます。
つまり、皮膚の細胞でも毛の細胞でもどこからもクローンを作ることが可能なのです。
つまり、同一の構造をもった細胞(セル)によって人間は構成されているのです。
DNAが胎生・成長・老化のすべてを制御しています。
DNAは指令書で、指令書の通りに細胞分裂が起き各器官になり、成長していきます。
DNAは、顔つきや体重・身長などを決めるだけでなく、性格も規定します。
つまり、DNAは全体を支配しています。
ところが、人間を構成するすべての細胞がそのDNAをもっています。
部分が全体であり、全体が部分なのです。
まさに、究極の入れ子式構造です。
行政の仕組みも、市町村→都道府県→国と基本的には同じ仕組みをもった行政組織が入れ子式に組み込まれています。
最高責任者(市町村長、都道府県知事、総理大臣)がいて、そこに執行組織(市庁や内閣等)があり、そして執行組織を監督指導する議会(市町村議会、同道府県議会、衆議院・参議院議会)
があります。
会社の組織も入れ子式になっています。
文学の描く人間模様も恋愛や嫉妬や憧憬など基本構造は同一です。
同一のセル(細胞=構成要素)から全体が構成される事例は、いくらでもあるのです。
ひょっとすると自然や社会の本質は、同一構造の繰り返しなのかもしれません。
階乗やナンバープレイスのように同じ条件の繰り返しのときに威力を発揮するのが、この講の主題であるプロシージャの再帰的使用なのです。
第2話において階乗を求める計算を再帰的使用によってプログラミングすることによって、プロシージャの再帰的使用とな何なのか説明していきたいと思います。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
数学研究室に戻る