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

第3話 Subプロシージャ版順列作成 


Dim a(15) As Byte
Dim cn As Long
Dim n As Byte
Private Sub CommandButton1_Click()

  n = Cells(2, 10)
  cn = 0
  f (0)

  Cells(3, 13) = cn

End Sub

Sub f(g As Integer)

  Dim i As Byte, j As Byte, h As Byte

  For i = 1 To n
    a(g) = i
    h = 1
    If g > 0 Then
      For j = 0 To g - 1
        If a(g) = a(j) Then
          h = 0
          Exit For
        End If
      Next
    End If
    If h = 1 Then
      If g + 1 < n Then
        f (g + 1)
      Else
        For j = 0 To n - 1
          Cells(5 + 2 * Int(cn / 10), 1 + (n + 1) * (cn Mod 10) + j) = a(j)
        Next
        cn = cn + 1
      End If
    End If
  Next

End Sub

Private Sub CommandButton2_Click()

  Rows("5:20000").Select
  Selection.ClearContents
  Range("J2,M3").Select
  Selection.ClearContents
  Cells(1, 1).Select
End Sub

これで、理論的には何次でも可能な順列作成プログラムになります。
8次順列版に比べると、遙かにコードが簡単で、汎用性があります。
つまり次元が変わる度にコードを書き換える必要がありません。
皆さんの頭には?が浮かんでいますね。
当然です。
初心者にとって一番の難所だからです。
でも、大丈夫です。ループ版のときと同様に詳しく解説していきますので、
粘り強く読んでいけば必ず理解できます。


第2話へ 第4話へ

004
  


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

数学研究室に戻る