当前,我正在手动将值输入到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
答案 0 :(得分:1)
前段时间,我没有比这更好的事情了,我确切地编写了您要查找的代码-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