第10講 ファンクションプロシージャの再帰的使用

第5話 ファンクションプロシージャの再帰的使用による1からnまでの積プログラム解説

3
を実現するプログラム主要部分再掲
Function f(g As Long)

  If g > 1 Then
    f = f(g - 1)
  Else
    f =
1
  End If
  f = f
* g
  
End Function

解説
社長であるCommandButton1_Clickがf(10)に10!は何かと問い合わせます。
10!=10×9×8×7×6×5×4×3×2×1
    =10×9!
ですから、
10!が分かるためには9!が分からなければなりません。
そこで、f(10)はf(9)に9!は何かと問い合わせます。
9!=9×8×7×6×5×4×3×2×1
   =9×8!
ですから、
9!が分かるためには8!が分からなければなりません。
そこで、f(9)はf(8)に8!は何かと問い合わせます。
8!=8×7×6×5×4×3×2×1
   =8×7!
ですから、
8!が分かるためには7!が分からなければなりません。
そこで、f(8)はf(7)に7!の値は何かと問い合わせます。
             ・
             ・
             ・
2!=2×1
   =2×1!
ですから、
2!が分かるためには1!が分からなければなりません。
そこで、f(2)はf(1)に1!の値は何かと問い合わせます。
f(1)は、引数の値1が1より大きくありませんので、
If文の否定側
  If g > 1 Then
    f = f(g - 1)
  Else
    f = 1
  End If
を実行してfに1をはじめて代入して、
  f = f * g
すなわち
  f = 1 * 1
から
  f = 1
として、f(2)に1!は1であると返答します。
f(2)は返ってきた値1をfに代入して
  f = f * g
すなわち
  f = 1 * 2
から
  f = 2
として、f(3)に2!は2であると返答します。
f(3)は返ってきた値2をfに代入して
  f = f * g
すなわち
  f = 2 * 3
から
  f = 6
として、f(4)に3!は6であると返答します。
以下同様にして
f(4)はf(5)に4!は24であると返答します。
f(5)はf(6)に5!は120であると返答します。
            ・
            ・
            ・
f(9)はf(10)に9!は362880であると返答します。
f(10)はCommandButton1_Clickに10!は3628800であると返答します。

以上の過程は、
1→1×1=1→1×2=2→2×3=6→6×4=24→・・・→362880×10=3628800
です。




10!は何?
10!=10×9×8×7×6×5×4×3×2×1
    =10×9!
9!は何?
9!=9×8×7×6×5×4×3×2×1
   =9×8!
8!は何?
8!=8×7×6×5×4×3×2×1
   =8×7!
7!は何?
             ・
             ・
             ・
2!=2×1
   =2×1!
1!は何?
以上が遡及の旅です。
ここから逆遡及の旅が始まります。
1!=1
2!=2×1!=2×1=2
3!=3×2!=3×2=6
4!=4×3!=4×6=24
       ・
       ・
10!=10×9!=10×362880=3628800
です。
!すなわち階乗は、入れ子式に同じ構造をしている!
だからこそ、入れ子式人形であるプロシージャの再帰的呼び出しがぴったりなのです。

さて、ファンクションプロシージャの再帰的呼び出しの題材として、
ユークリッド互除法を取り上げることにしましょう。
これはとても面白いテーマですので、
独立した講にしたいと思います。
したがいまして、第10講はこれにて終了です。
ということは、
『初心者のための excel 2016 マクロ vba 入門講義 基礎から応用まで 第1部』
の終演を意味します。


第4話へ 第11講第1話へ
004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ第2部へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ