第12講 Functionプロシージャの再帰的使用の学習

第1話 Functionプロシージャの再帰的使用による階乗の計算
Functionプロシージャは返り値をもちます。
それを利用した有名な再帰的使用のプログラムとして、階乗の計算があります。
階乗とは、5の階乗なら5!=1×2×3×4×5です。
では皆さん、階乗を理解するために
1!、2!、3!、4!、5!、6!、7!、8!を手で計算してみましょう。
答えは30行下。

















解答
1!=1
2!=1×2=2
3!=1×2×3=6
4!=1×2×3×4=24
5!=1×2×3×4×5=120
6!=1×2×3×4×5×6=720
7!=1×2×3×4×5×6×7=5040
8!=1×2×3×4×5×6×7×8=40320
です。皆さん計算していく内に、次のことに気がついたのではないでしょうか。
8!=5040×8です。
つまり、8!=8×7!ですね。
一般にn!=n×(n−1)!です。
nがいくつでも同じ仕組みをしています。
7!=7×6!
6!=6×5!
5!=5×4!

そうです。同じことの繰り返しです。
ということは、再帰的使用が向いているということです。
今回は、課題とするには難しすぎると思いますので、
プログラム例を示してから、1×2×3×・・・×nの計算をFor文ではなく、Functionプロシージャの再帰的使用によって実現していただきます。
シート
シート
コード
Private Sub CommandButton1_Click()

  Dim n As Long

  n = Cells(2, 4)

  Cells(5, 1) = "答え"
  Cells(5, 2) = f(n)

End Sub

Function f(n As Long)

  If n = 1 Then f = 1
  If n - 1 > 0 Then
    f = n * f(n - 1)
  End If

End Function

Private Sub CommandButton2_Click()

  Rows("5").Select
  Selection.ClearContents
  Range("D2").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub
実行例
実行例

解説
f = n * f(n - 1)は、n!=n×(n−1)!に対応しています。
8!を例にとればどんどん遡及していって
8!=8×7!
7!=7×6!
6!=6×5!
5!=5×4!
4!=4×3!
3!=3×2!
2!=2×1!
1!で入れ子式人形の一番内側にたどり着きます。
そうすると、If n = 1 Then f = 1から一番内側の人形の姿(もっとも奥深い自分の本質)が
1であることがはじめてわかります。
1!=1  そしてそれを逆遡及していくと
2!=2×1=2
3!=3×2=6
4!=4×6=24
5!=5×24=120
6!=6×120=720
7!=7×720=5040
8!=8×5040=40320
と一番外側の人形の正体がわかります。

ではこれを参考に、1+2+3+・・・+nの計算をFor文ではなく、Functionプロシージャの再帰的使用によって実現しましょう。
シート
足し算シート
実行例
足し算実行例

第11講第8話へ 第2話へ

004
  


VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る