第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話へ
VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る