§Algorithm§


☆再帰−べき乗計算−☆


 再帰とは? あるプロシージャ 「A」 があるとすると、この A から A 自らを呼び出すこと を再帰といいます。プロシージャ全体の処理を繰り返ししたいときに用います が、この再帰を行うときに重要なのがプロシージャからの脱出口をつくってお かなければならないことです。脱出口がなければそのプロシージャを呼び出し 続けるわけですから、無限ループとにたような感じになってしまいます。  下図にこの再帰の機構を示します。 

 図のようにプロシージャ A をプロシージャ A から呼び出し再帰処理を行う と必ず呼び出した側のプロシージャに戻ります。つまり、プロシージャ A を プロシージャ A から呼び出した段階では、呼び出し側のプロシージャ A の処 理が途中なため、呼び出されたたプロシージャ A の処理が終わって呼び出し側 に戻ることで、呼び出し側のプロシージャ A の処理が終わることになります。 このことは、当然のことですが、再帰処理を理解する上でとても大切なことです。
 この再帰を利用して、べき乗計算を行うコードを下に示します。 (べき乗は 2^5=32のようにVBでは簡単にできるんですけど)

'============================================================
'Pow   再帰処理で、べき乗計算をし、その答えを返す
'------引数--------------------------------------------------
'a     べき乗する値
'n     何乗?
'============================================================
Public Function Pow(a As Double, n As Double) As Double
    If n = 1# Then Pow = a: Exit Function
    If n = 0# Then Pow = 1#: Exit Function
    Pow = a * Pow(a, n - 1#)
End Function

 この処理は、ループ処理を使っても簡単に行えます。

'============================================================
'Pow2   ループ処理で、べき乗計算をし、その答えを返す
'------引数--------------------------------------------------
'a      べき乗する値
'n      何乗?
'============================================================
Public Function Pow2(a As Double, n As Double) As Double
    Dim i As Double
    Dim r As Double
    r = 1#
    i = 1#
    Do While i <= n
        r = r * a
        i = i + 1#
    Loop
    Pow2 = r
End Function

 このように再帰で行う処理は、たいていの場合ループ処理でも可能です。 しかし、処理が複雑になった場合や特定のアルゴリズム(クイックソートやハノイの塔等) では、再帰を用いる方がはるかに簡略なコードで実現することができます。 もっとも、処理速度は一般的にループ処理より遅いといわれていますが。


(サンプルプログラムの動作確認)

機種 PC-9821V13S
OS Windows95
開発ツール Visual Basic Ver.4.0
更新日 99/12/30

ダウンロード Recursion.lzh(1.84KB)

Visual Basic Ver.5.0,Ver.6.0でも問題なく動作すると思います。
なお、このコーナーに掲載されているプログラムコード、およびプログラムファ イルが原因で起きた損害などに関して一切の責任を負うことはできません。

★このコーナーに掲載されているプログラムコード、およびプログラムファ イルを無断で配布・転載することは、原則として禁止です。


Algorithmインデックス トップ


Copyright(C)1999 Tomoya. All rights reserved.