第10講 プロシージャの再帰的使用
第3話 Subプロシージャの再帰的使用による1から10までの和
をSubプロシージャで実現するプログラム例
Dim w As Byte
Private Sub CommandButton1_Click()
w = 0
f (1)
End Sub
Sub f(i As Byte)
w = w + i
If i < 10 Then
f (i + 1)
Else
Cells(5, 1) = "1から10までの和は"
Cells(6, 3) = w
Cells(7, 1) = "です。"
End If
End Sub
もちろん
Private Sub CommandButton1_Click()
w = 0
f (0)
End Sub
としても結果は同じです。この場合は、
w = 0
w = w + 0
w = w + 1
w = w + 2
w = w + 3
w = w + 4
w = w + 5
w = w + 6
w = w + 7
w = w + 8
w = w + 9
w = w + 10
の計算をしたことになります。
分身の術により11人に分身したことになります。
Subプロシージャだと、グローバル変数を用意しないと、
1から10までの和を求めるプログラムは難しくなります。
例えば、次のようにすればグローバル変数を使わないで
1から10までの和は求められます。
Private Sub CommandButton1_Click()
Call f(0, 1)
End Sub
Sub f(w As Byte, i As Byte)
w = w + i
If i < 10 Then
Call f(w, i + 1)
Else
Cells(5, 1) = "1から10までの和は"
Cells(6, 3) = w
Cells(7, 1) = "です。"
End If
End Sub
尚、
Call f(0, 1)
などとCallが付いていますが、
引数が複数になる場合Callをつけないとエラーします。
もし、Callをつけたくない場合は、
f 0, 1
としなければなりません。
私の好みはf(0, 1)なのですが、VBやVBAでは認められていません。
f(0, 1)を使いたいときはCallを付けなければなりません。
上手く工夫すれば、
引数1つでSubプロシージャでも実現できるかも知れませんが、
凡庸な私の頭では思いつきません。
ですが、その私でもFunctionプロシージャなら簡単に実現できます。
皆さん考えてみてください。
ただし、ノーヒントでは難しいので、
CommandButton1_Clickの部分は載せておきましょう。
Private Sub CommandButton1_Click()
Cells(5, 1) = "1から10までの和は"
Cells(6, 3) = f(10)
Cells(7, 1) = "です。"
End Sub
つまり、逆順にプログラムを組むということです。
w = w + 10
w = w + 9
w = w + 8
w = w + 7
w = w + 6
w = w + 9
w = w + 5
w = w + 4
w = w + 3
w = w + 2
w = w + 1
w = 0
このヒントを載せてもかなりの難問です。
皆さんじっくり考えてみてください。
初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門
数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ