不用递归,直接循环计算的代码:- Sub test5() 'by kagawa
- Dim ar&(), br(), a, b, c, d, i
- a = 12: b = 8: c = 5: d = 6 '目标值
-
- ReDim ar(1 To 3, 1 To 99)
- ar(1, 1) = a
-
- For i = 1 To 99 '按大中小顺序计算
- If ar(2, i) = 0 Then 'x>0,y=0: x->y
- If ar(1, i) > b Then ar(2, i + 1) = b: ar(1, i + 1) = ar(1, i) - b Else ar(2, i + 1) = ar(1, i)
- ar(3, i + 1) = ar(3, i)
- ElseIf ar(3, i) < c Then 'y>0,z<C: y->z
- If ar(2, i) + ar(3, i) > c Then ar(2, i + 1) = ar(2, i) + ar(3, i) - c: ar(3, i + 1) = c Else ar(3, i + 1) = ar(3, i) + ar(2, i)
- ar(1, i + 1) = ar(1, i)
- Else 'z>0,x<A: z->x
- ar(1, i + 1) = ar(1, i) + ar(3, i)
- ar(2, i + 1) = ar(2, i)
- End If
- If ar(1, i + 1) = d And ar(2, i + 1) = d Then Exit For
- Next
-
- ReDim Preserve ar(1 To 3, 1 To i + 1)
- br = WorksheetFunction.Transpose(ar)
- Stop
- End Sub
复制代码 |