第10講 プロシージャの再帰的使用
第4話 Functionプロシージャの再帰的使用による1から10までの和


数独
をFunctionプロシージャで実現するプログラム例
Private Sub CommandButton1_Click()
  Cells(5, 1) = "1から10までの和は"
  Cells(6, 3) = f(10)
  Cells(7, 1) = "です。"
End Sub
Function f(i As Byte)
  If i > 0 Then
    f = f(i - 1) + i
  Else
    f = 0
  End If
End Function

解説
まず、
  Cells(6, 3) = f(10)
によって、CommandButton1_Clickから
1番外側の人形f(10)に仕事を依頼しました。
iは10ですから、
  If i > 0 Then
    f = f(i - 1) + i
  Else
    f = 0
  End If
の肯定側
    f = f(i - 1) + i
が実行されます。i=10ですから
    f = f(9) + 10
ところが足されるf(9)は、Subプロシージャf(9)から報告が返ってくるまで分かりません。
外から2番目の人形でも
    f = f(8) + 9
f(8)は外から3番目の人形Subプロシージャf(8)から報告が返ってくるまで分かりません。
この分からないものとの和は
10番目の人形f(1)まで続きます。
    f = f(0) + 1
そして、11番目の人形すなわち1番内側の人形に達したとき
  If i > 0 Then
    f = f(i - 1) + i
  Else
    f = 0
  End If
はじめてIf 文の否定側が実施されてf(0)の正体が0であることが明かされるのです。
ここから逆遡及が始まります。
f(0)からf(0)の値は0であることがf(1)に報告されて、
    f = f(0) + 1

    f = 0 + 1
となり、f(1)の値が分かります。その値は1です。
そして、その外側の人形f(2)の
    f = f(1) + 2

    f = 1 + 2
となり、f(2)の中身が分かります。
最初の遡及
f(10),f(9),f(8),f(7),f(6),f(5),f(4),f(4),f(3),f(2),f(1)
ではそれぞれの値はすべて謎のままだった訳ですが、
最後の11番目の人形=1番内側の人形にたどり着いて、
はじめて自分の内なる本質を発見します。
なんと0だったのです。
自分の本質は空=無だったのです。
そこを起点として謎は次々に解明されていきます。
謎の解明は逆遡及時に行われていきます。
    f = 0
    f = 0 + 1
    f = 1 + 2
    f = 3 + 3
    f = 6 + 4
    f = 10 + 5
    f = 15 + 6
    f = 21 + 7
    f = 28+ 8
    f = 36 + 9
    f = 45 + 10
    f = 55

とても哲学的なプログラムです。
いろいろな仮面や役割に覆われているために、
真の自分が分からなくなっている、
そこで1枚1枚自分の衣装を脱いでいって、
自分の内なる本質への旅を始めます。
1番自分の内奥まで辿り、
真の自分の姿を見いだしてから、
逆遡及をして今の自分を省みるのです。
自分探しの旅は、より深く自分自身に内省して、
本当の自分を発見して逆遡及をしてこそ、
頽落(平均的な人に崩れ落ちてしまうこと)してしまった自分を説明できるのです。


脱線は以上にしましょう。
実は
Private Sub CommandButton1_Click()
  Cells(5, 1) = "1から10までの和は"
  Cells(6, 3) = f(
1)
  Cells(7, 1) = "です。"
End Sub
としても1から10までの和は求められます。
それを考えてみてください。



第3話へ 第5話へ



トップ

初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門

数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ