递归排列:递归与排列-vb教程

RONG>笔者曾写过一个递归与组合的算法(),下面给出一个排列的递归算法,请大家指教。

Private Sub Command1_Click() ´ 列出数组a 的全排列
Dim a(8) As String, temp As String
For i = 0 To 8
a(i) = i
Next
temp = permutation(a, UBound(a))
Debug.Print temp
Debug.Print \"共有 \" & UBound(Split(temp, vbCrLf)) + 1 & \" 种排法!\"
End Sub
Function addxtostr(ByVal x0 As String, ByVal xadd As String) As String ´ eg: x0: \"1,2,3,4\",we will add 5 to x0
Dim temp, temp2, all() As String, i As Long
temp = Split(x0, \",\")
ReDim all(UBound(temp) + 1)
all(0) = xadd & \",\" & x0 ´ return \"5,1,2,3,4\"
For i = 1 To UBound(all)
temp2 = temp
temp2(i - 1) = temp2(i - 1) & \",\" & xadd ´ add 5 between every two contunious number
all(i) = Join(temp2, \",\")
Next
addxtostr = Join(all, vbCrLf)
Set temp = Nothing
Set temp2 = Nothing
Erase all
End Function
Function permutation(ByRef a() As String, ByVal n As Long) As String ´列出数组a 的前n-1 个元素的全排列
Dim i As Long, temp, all() As String
If n = 0 Then permutation = a(0)
If n = 1 Then permutation = a(0) & \",\" & a(1) & vbCrLf & a(1) & \",\" & a(0)
If n > 1 Then
temp = Split(permutation(a, n), vbCrLf) ´ 递归
ReDim all(UBound(temp))
For i = 0 To UBound(temp)
all(i) = addxtostr(temp(i), a(n))
Next
permutation = Join(all, vbCrLf)
End If
Erase all
End Function


Tags:  vb6.0教程 vb教程 递归全排列 递归排列

延伸阅读

最新评论

发表评论