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

第5話 ユークリッド互除法によって最大公約数を求める!
コード例
Private Sub CommandButton1_Click()

  Dim a As Long, b As Long, w As Long

  a = Cells(2, 5)
  b = Cells(3, 5)

  'bの方が大きいとき、aとbを交換しておく
  If b > a Then
    w = a
    a = b
    b = w
  End If
  Cells(5, 2) = f(a, b)

End Sub

Function f(a As Long, b As Long)

  If a Mod b = 0 Then
    f = b
  Else
    f = f(b, a Mod b)
  End If

End Function

Private Sub CommandButton2_Click()

  Range("E2,E3,B5").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub

これも遡及によって、はじめて本質がわかる例です。
割り算を繰り返していって、やっと余りが0になるときに割る数として姿を現します。
尚、今回のプログラムでは f(a, b) のaとbはa>bを前提して組んであります。
f(b, a Mod b)のbとa Mod bでは、文句なしにb>a Mod bです。
余りは、割る数より小さいからです。

23÷5=4・・・3
5>3
ですね。

f = f(b, a Mod b)の部分に違和感を感じる方もいらっしゃると思いますが、
まだ、一番内側の人形に達していない場合は、さらに遡及を繰り返しなさいということです。
Funtcinプロシージャでは、f=f(・・・)ということが現れますが、
これもi=i+1を思い起こしていただければ別に不思議はありません。
f(・・・)で何らかの操作をして値を決めて、それを改めてfの値のしなさいということです。
i=i+1と何ら変わりありませんね。i=i+1場合は何らかの操作は、iに1加えるということです。

では、次の課題です。
素数判定を、For文ではなくFunctionプロシージャの再帰的使用によって実現してください。
シートも皆さんにお任せします。

第4話へ 第6話へ

004
  


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

数学研究室に戻る