目前我手动将值输入数组,sign_array(a,b,c)。其中c是级别编号。所以请看下面的输出,其中c = 1,阵列只有两个输入。当c = 2(或等级2)时,有4个输入。 3级= 8个输入,4级有16个输入。但把这些全部写出来变得非常烦人。
我真的很挣扎。我需要写一个数组的所有组合1或2,并寻找输出:
1
2
1, 1
1, 2
2, 1
2, 2
1, 1, 1
2, 1, 1
1, 2, 1
1, 1, 2
2, 2, 1
2, 1, 2
1, 2, 2
2, 2, 2
1, 1, 1, 1
2, 1, 1, 1
etc
请看下面我有多远,但不知道该怎么做,区分1或2.任何帮助将不胜感激。目前我自己手动投入组合,但是我的尺寸越来越大,我的尺寸越来越大。
我不介意为每个级别的创建都有一个for循环。
levels_to_use = 4
for i = 1 to levels_to_use ^ 2
for j = 1 to levels_to_use
' in here how to chose between 1 or 2
sign_array(i, j, levels_to_use) = 1
next
next
前一段时间,我没有更好的事情要做,我写的是你正在寻找的代码 - https://www.vitoshacademy.com/vba-nested-loops-with-recursion/
因此,如果你稍微改变它,避免使用_
并将size
变量放入循环中,它会打印出所需的结果:
如果将c = Array(1, 2)
更改为c = Array(1, 2, 3)
,则会向系统添加第三个元素。
Sub Main()
Static size As Long
Static c As Variant
Static arr As Variant
Static n As Long
c = Array(1, 2)
n = UBound(c) + 1
For size = 1 To 4
ReDim arr(size - 1)
EmbeddedLoops 0, size, c, n, arr
Debug.Print "---------"
Next size
End Sub
Function EmbeddedLoops(index, k, c, n, arr)
Dim i As Variant
If index >= k Then
PrintArrayInOneLine arr
Else
For Each i In c
arr(index) = i
EmbeddedLoops index + 1, k, c, n, arr
Next i
End If
End Function
Public Sub PrintArrayInOneLine(myArray As Variant)
Dim counter As Long
Dim sArray As String
For counter = LBound(myArray) To UBound(myArray)
sArray = sArray & myArray(counter)
Next counter
Debug.Print sArray
End Sub