これがあなたが探しているものだと思います:
Module Module1
Sub Main()
Dim bytes() As Byte = {&H17, &H0, &H0, &H0, &HA4, &HEA, &HDB, &H13, &H2, &H0, &H0, &H0, &H0, &H0, &H0, &HA3, &HD3, &H2, &HCC}
Combine(New Byte() {}, bytes)
End Sub
Sub Combine(ByVal sequence() As Byte, ByVal pool() As Byte)
' test current sequence
If Test(sequence) Then
Console.Write("Found sequence: ")
For Each b As Byte In sequence
Console.Write("{0:X2} ", b)
Next
Console.WriteLine()
End If
' done if pool is empty
If pool.Length = 0 Then
Return
End If
' recurse adding next byte from the pool
Dim newSequence(sequence.Length) As Byte
Array.Copy(sequence, newSequence, sequence.Length)
newSequence(sequence.Length) = pool(0)
Dim newPool(pool.Length - 2) As Byte
Array.Copy(pool, 1, newPool, 0, pool.Length - 1)
Combine(newSequence, newPool)
' recurse without adding next byte from the pool
Combine(sequence, newPool)
End Sub
Function Test(ByVal sequence() As Byte) As Boolean
' the test function that you haven't provided goes here
' this example returns True if the sequence is 4 bytes or more, causing every combination of at least 4 bytes to be printed
If (sequence.Length >= 4) Then
Test = True
Else
Test = False
End If
End Function
End Module
元の質問でそれを提供しなかったので、 Test 関数の実装をあなたに任せます。私の実装では、基本的に 4 バイト以上のすべてのシーケンスがテストに合格したものとして扱われるため、すべての組み合わせが出力されます。
空のシーケンスで始まる再帰アルゴリズムと、バイトの「プール」内の 19 バイトすべてを使用しました。次に、プールの最初のバイトを構築中のシーケンスに移動し、プールの最初のバイトを完全に無視して、両方を再帰します。