組み合わせを抽出するために使う再帰呼び出しについて
1,2,3,4,5の数列から3の数の組合せをワークシートに表示するプログラムを作っています。
このソースは以前他の質問に載っていたものを自分用に多少アレンジしたものです。構造は再帰呼び出しを使って、123、124、125、134、135、145、234、235…345という形で結果を出力します。いろいろと試してみて、計算結果は正しいとわかったのですが、デバックをしていて1つどうしても理解できないことがありました。計算結果が145から234になるとき、カーソルがSub combiPrのEnd subを指したあと直前のEnd ifに移ります。その後Forに移って234以降の計算を始めます。どうしてEnd Subからこのような動作をするのかわかる方いらっしゃいましたら是非ワケを教えてください。よろしくお願いしますm(_ _)m
Const m As Integer = 3 '←取り出す個数
Const n As Integer = 5 '←サンプル数
Dim rStr As String
Dim mRow As Integer
Dim Nest As Integer
Dim A(10) As Variant
Sub combi()
Cells.ClearContents
mRow = 0
Nest = 0
combiPr (0)
End Sub
Sub combiPr(n1)
Dim mCol As Integer
For nn = n1 + 1 To n - m + Nest + 1
Nest = Nest + 1
A(Nest) = nn
If Nest = m Then
mRow = mRow + 1
For mCol = 1 To m
Worksheets(1).Cells(mRow, mCol).Value = A(mCol)
Next
Else
Call combiPr(nn)
End If
Nest = Nest - 1
Next nn
End sub