第10講 ファンクションプロシージャの再帰的使用
第5話 ファンクションプロシージャの再帰的使用による1からnまでの積プログラム解説
を実現するプログラム主要部分再掲
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部』
の終演を意味します。
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入門へ
本サイトトップへ