VBA

【再帰処理をマスターしよう】VBAで階乗の計算をしてみる

VBA階乗アイキャッチ
ねぇもりさん、このまえプログラミングの本を読んでたら「再帰」っていう処理をみたんだけど、ぜんぜんわからなかったよ
もり
もり
おっ、再帰処理だね。よ~し!じゃあいっしょに勉強しよっか

再帰処理を使って階乗の計算をしてみよう

まずは「再帰」と「階乗」の用語の確認からしましょう。

再帰とは

再帰(さいき)は、あるものについて記述する際に、記述しているものそれ自身への参照が、その記述中にあらわれることをいう。

うーん、むずかしいですね~
でも大丈夫です。もりさんがしっかり解説してくれますから

階乗とは

階乗とは、1~nまでの数字の積です。
n! = n × (n-1) ×・・・× 3 × 2 × 1

n=5の場合、

5!=5×4×3×2×1なので「5の階乗は120」となります。

コード

下記のコードをF8キーでステップ実行してみてください

Functionプロシージャ nの階乗()の、この部分が再帰です。

nの階乗 = n * nの階乗(n - 1)

Function nの階乗() が、 Function nの階乗()に引数を渡して呼び出します

再帰のやさしい解説

もり
もり
言葉で説明するより、この図がわかりやすいよ

kaijo2
この図をみると、階乗の計算はこんな風に分解できますね。

  • 5の階乗=5 × 4の階乗
  • 4の階乗=4 × 3の階乗
  • 3の階乗=3 × 2の階乗
  • 2の階乗=2 × 1の階乗
  • 1の階乗

これらの数字をすべてnに置き換えるとこのように書けます。

nの階乗=n × (n-1)の階乗

「呼び出す」と「返る」を理解する

kaijo1

①[5の階乗]は5×[4の階乗]なので、[4の階乗]を求めるために、function nの階乗()に引数4を渡して呼び出す

②[4の階乗]は4×[3の階乗]なので、[3の階乗]を求めるために、function nの階乗()に引数3を渡して呼び出す

③[3の階乗]は3×[2の階乗]なので、[2の階乗]を求めるために、function nの階乗()に引数2を渡して呼び出す

④[2の階乗]は2×[1の階乗]なので、[1の階乗]を求めるために、function nの階乗()に引数1を渡して呼び出す

⑤[1の階乗]は “1”なので、呼び出し元に1を返す

⑥[2×1]=”2”なので、呼び出し元に2を返す

⑦[3×2]=”6”なので、呼び出し元に6を返す

⑧[4×6]=24なので、呼び出し元に24を返す

最後:[5×24]は120である

このように、

①呼び出す→②呼び出す→③呼び出す→④呼び出す→⑤返る→⑥返る→⑦返る→⑧返る

のイメージがつかめればバッチリです!

「自身への参照」って聞くと不思議な感じだけど、ただ単純に、プロシージャがプロシージャを呼び出してるだけなんだね
もり
もり
すばらしい!そのとおり!今日の授業はかんぺきだね~おつかれさま