For Y0 = 0 To b(1) For Y1 = 0 To b(2) For Y2 = 0 To b(3) For Y3 = 0 To b(4) For Y4 = 0 To b(5) For Y5 = 0 To b(6) For Y6 = 0 To b(7) For Y7 = 0 To b(8) For Y8 = 0 To b(9) For Y9 = 0 To b(10) For Y10 = 0 To b(11) For Y11 = 0 To b(12) For Y12 = 0 To b(13) For Y13 = 0 To b(14) For Y14 = 0 To b(15) For Y15 = 0 To b(16) For Y16 = 0 To b(17) For Y17 = 0 To b(18) For Y18 = 0 To b(19) For Y19 = 0 To b(20)
Next Y19 Next Y18 Next Y17 Next Y16 Next Y15 Next Y14 Next Y13 Next Y12 Next Y11 Next Y10 Next Y9 Next Y8 Next Y7 Next Y6 Next Y5 Next Y4 Next Y3 Next Y2 Next Y1 Next Y0
Sub ArrRecursion(aa&(), p&)
Static M&Dim i&
M =UBound(aa)
If (p < M) ThenFor i =0To aa(p)
Call ArrRecursion(aa, p +1)
NextElseFor i =0To aa(p)
'在这里写最内层的执行语句'………………'………………NextEndIfEnd Sub
调用的时候,参数p要传入0,比如:Call ArrRecursion(aa, 0)
可以简单的验证一下:
Option Explicit Dim mlRunTotal&
Sub ArrRecursion(aa&(), p&)
Static M& Dim i&
M = UBound(aa) If (p < M) Then For i = 0 To aa(p) Call ArrRecursion(aa, p + 1) Next Else For i = 0 To aa(p) mlRunTotal = mlRunTotal + 1 Next End If
End Sub
Private Sub cmdTest_Click()
Dim A&(), K&, N&, S& Dim i%
K = 5
ReDim A(K) Randomize S = 1 Debug.Print For i = 0 To K N = Rnd() * 8 + 2 '简单的限制一下值域 A(i) = N S = S * (N + 1) Debug.Print i; ">>>"; N Next Debug.Print "理论执行次数:"; S
Dim k&, w&, n&, sab&,temp&,c&(1To20)
PublicSub ArrRecursion(p&, j&)
Dim i&
c(p +1) = j
If (p <20) ThenFor i =0To b(p)
Call ArrRecursion(p +1, i)
NextElse
sab =0For k =1To19
sab = sab + c(k) * a(k)
NextFor k =0To b(20)
temp = k * a(20)
If Sheet1.Cells(2, 2) - temp - sab < Sheet1.Cells(2, 3) _
And Sheet1.Cells(2, 2) - temp - sab >=0Then
w = w +1For n =1To20
Sheet2.Cells(w, n +1) = c(n)
Next
Sheet2.Cells(w, 22) = w -1
Sheet2.Cells(w, 23) = Sheet1.Cells(2, 2) - temp - sab
Sheet2.Cells(w, 24) ="x"+ Str(w -1)
EndIfNextEndIfEnd Sub