第9講 サブプロシージャの再帰的使用
第1話 サブプロシージャの再帰的使用とは?
第8講の第13話で、魔方陣自動生成ソフト
を作りました。
9次元For文
Sub f()
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim o As Integer, p As Integer, q As Integer
Dim r As Integer
Dim cn As Long
Dim a(9) As Integer
cn = 0
For i = 1 To 9
a(0) = i
For j = 1 To 9
If j <> a(0) Then
a(1) = j
For k = 1 To 9
If k <> a(0) And k <> a(1) Then
a(2) = k
For l = 1 To 9
If l <> a(0) And l <> a(1) And l <> a(2) Then
a(3) = l
For m = 1 To 9
If m <> a(0) And m <> a(1) And m <> a(2) And m <> a(3) Then
a(4) = m
For n = 1 To 9
For o = 0 To 4
If n = a(o) Then GoTo tobi1
Next
a(5) = n
For o = 1 To 9
For p = 0 To 5
If o = a(p) Then GoTo tobi2
Next
a(6) = o
For p = 1 To 9
For q = 0 To 6
If p = a(q) Then GoTo tobi3
Next
a(7) = p
For q = 1 To 9
For r = 0 To 7
If q = a(r) Then GoTo tobi4
Next
a(8) = q
Call g(cn, a())
tobi4:
Next
tobi3:
Next
tobi2:
Next
tobi1:
Next
End If
Next
End If
Next
End If
Next
End If
Next
Next
End Sub
には大変骨が折れました。
本当にご苦労様でした。
もし、4次魔方陣自動生成ソフトを開発しようとしたら、
4×4=16次元ループ処理になってしまいます。
9次でさえ大変だったのに、
16次は全く組む気が起きませんよね。
このサイトを読み続けていきますと、将来的には、
26次魔方陣なども1秒で100個単位の生成ができるようになるのですが、
もしこれをFor文で生成するとなると、
26×26=676次元For文になってしまいます。
これは、どんなに忍耐強い方でも、
やる気は起きないのではないでしょうか。
100次魔方陣なら、
100×100=10000次元ループです。
ところが、この不可能に見える課題を簡単にクリアしてしまう方法があるのです。
それが、この講で学ぶ『サブプロシージャの再帰的使用という手法』です。
自分に戻ってきますので、
私は『サブプロシージャの自己再帰』という呼び方もします。
『サブプロシージャの自己再帰』というととても難しいとお感じになるかも知れませんが、
内容はとても簡単です。
それは、サブプロシージャが自分に仕事を依頼することです。
「自分が自分に仕事を依頼するですって?どういうこと?」
というのが皆さんの心境でしょう。
人間の世界なら、難しいかも知れませんが、
プログラムの世界では出来るんですよ。
そして、アルファ碁ももちろんこの関数の再帰的使用という方法を、
間違いなく使っているでしょう。
自己再帰の発見は、プログラミングの世界に時期を画すものだったに違いありません。
自己再帰は、プログラミングの可能性を劇的に飛躍させたのです。
私が、開発した数独自動生成ソフトは、
すべて自己再帰を使っています。
また、魔方陣自動生成ソフトもほとんどのもので再帰的使用を使っています。
魔方陣の研究に、自己再帰が使えるということを発見したことは、
私の魔方陣生成研究を革命的に跳躍させました。
私は、自己再帰は自然や社会の本質的構造なのではないかと思っています。
ですから、宇宙と社会の秘密を握っているのは、
自己再帰であるのではないかと、
考えています。
ヘーゲルは、自然も社会も弁証法的に出来ていると主張しました。
私は、その考えを発展させて、
弁証法を解明するためのキー概念は自己再帰であると申し上げたいと思います。
弁証法とは、私はメタ理解=メタ意識であると考えるのです。
対象を意識する意識を意識する=これがメタ意識です。
自分が対象を理解していること自体を対象にして、
理解することがメタ理解です。
簡単に言うと、意識を意識する、理解を理解するということです。
メタというのは上という意味です。
理解を理解することの重要性を説いているのが、
私の右脳数学教育論なのです。
論理一辺倒打倒、形式一辺倒打倒、左脳一辺倒打倒
とは、言い換えるとメタ理解のない理解は、本当の理解ではないということです。
論理より直観、形式より内容、部分より全体の理解こそが必要なのです。
少し高い丘に登り、論理の鎖を対象にして全体を眺めることが、
メタ理解であり、直観的理解=内容を伴う全体的理解のなのです。
ごめんなさい。難しい話をしてしまいました。
上の20行は、私の戯言であるとして無視して下さい。
さて、
自分が自分に仕事を依頼するとは、
社員(プロシージャ)が自分に仕事を依頼するとは、
いったいなんでしょうか。
興味がある方、第2話をクリックしましょう。
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
小学生からエンジニアまでのC言語入門 基礎から応用まで
本サイトトップへ