第12講 Functionプロシージャの再帰的使用の学習

第4話 Functionプロシージャの再帰的使用によるいろいろな積の計算
コード例
Private Sub CommandButton1_Click()

  Dim h As Long, o As Long, b As Long

  h = Cells(1, 5)
  o = Cells(2, 5)
  b = Cells(3, 5)

  Cells(5, 2) = f1(h, o, b)
  Cells(6, 2) = f2(h, o, b)
  Cells(7, 2) = f3(h, o, b)
  Cells(8, 2) = f4(h, o, b)

End Sub

Function f1(h As Long, o As Long, b As Long)

  If o = h Then f1 = h
  If o - b >= h Then
    f1 = o * f1(h, o - b, b)
  End If

End Function

Function f2(h As Long, o As Long, b As Long)

  If o = h Then f2 = h * h
  If o - b >= h Then
    f2 = o * o * f2(h, o - b, b)
  End If

End Function

Function f3(h As Long, o As Long, b As Long)

  If o = h Then f3 = h * h * h
  If o - b >= h Then
    f3 = o * o * o * f3(h, o - b, b)
  End If

End Function

Function f4(h As Long, o As Long, b As Long)

  If o = h Then f4 = h * h * h * h
  If o - b >= h Then
    f4 = o * o * o * o * f4(h, o - b, b)
  End If

End Function

Private Sub CommandButton2_Click()

  Range("E1:E3,B2:B8").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub

今回の課題は簡単でしたね。
Functionプロシージャの再帰的使用によるいろいろな和の計算のコードの+を*に変更するだけです。

前回の課題は、余り面白くなかったのでFunctionプロシージャの再帰的使用によるもっと面白いプログラムを考えてみましょう。
Functionプロシージャの再帰的使用のおもしろさは、一番深い自己(一番内側の人形)まで遡及しないと、
本当の自己の姿がわからない点です。
遡及と逆遡及によって、自分の姿を明らかにするそれがFunctionプロシージャの再帰的使用によるプログラムです。

これって、人間の本質と変わりないのではないでしょうか。
私たちは、本当の自分にいろいろな洋服を着せています。
家では、父親という役割を、会社では部長という役割を、地域ではいい人という仮面を、
というわけでいろいろかぶせています。
本当の自分は、いろいろな仮面や役割を脱ぎ捨てないとわかりません。
私たち人間も、結局入れ子式人形なのです。
本当の自分がわからない、だから自分探しをするんですよね。
自分探しをするためには、自分の一番内側まで遡及しないとわかりません。
本当の自分がわかれば、今の偽りの自分も逆遡及によってわかります。
つまり、本当の自分にいくつもの仮面をかぶせていけば、現状の自分がわかるわけです。
遡及と逆遡及によって物事の本質を明確にすることを最初に体系的に考えた人はヘーゲルやカール・マルクスといえるでしょう。
マルクスの書いた資本論も遡及と逆遡及の方法が使われています。
ただし、彼は下向法と上向法と呼んでいますが。

脱線は以上にして、本線に戻りましょう。
課題は、ユークリッド互除法で最大公約数を求めるというものです。
例えば、(1188,504)の最大公約数をユークリッド互除法では、次のように求めます。
まず、1188を504で割った余りを求めます。余りは、180です。
次に、504を180で割った余りを求めます。それは、144です。
次に、180を144で割ります。余りは、36です。
さらに、144を36で割ります。余りは、0です。
ここから、最大公約数は36と判定します。つまり、割り切ることの出来る数が最大公約数です。

手順は、a1>a2のとき、
1をa2で割った余りa3を求めます。
2をa3で割った余りa4を求めます。
3をa4で割った余りa5を求めます。

これを余りが0になるまで繰り返します。
n−1をaで割った余りが0とき、aが最大公約数です。

シート例
ユークリッド互除法シート
実行例
ユークリッド互除法実行例
では皆さん考えてみてください。

第3話へ 第5話へ

004
  


VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る