第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話へ
VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る