|
递归可以有。
如果就是 1-372 构成的31组12位数字进行31取6组合=736281组解的话,
用下面递归代码计算只要 30秒以内。
但73万多行结果输出到工作表就可能耗费大量时间了。→ 或许会死机?我没有试。- Dim sj%(), jg%(), l%, m%, n%, k&
- Sub 組合()
- tms = Timer
- m = 31: n = 6: l = 12
- ReDim sj%(1 To m, 1 To l)
- For i = 1 To m
- For j = 1 To l
- k = k + 1
- sj(i, j) = k
- Next
- Next
-
- k = WorksheetFunction.Combin(m, n)
- ReDim jg%(1 To k, 1 To n * l)
- k = 0: Call dgZH("", 0, 1)
-
- MsgBox Format(Timer - tms, "0.000s ") & k: tms = Timer
- [a1].Resize(Rows.Count, n * l) = ""
- [a1].Resize(k, n * l) = jg
- MsgBox Format(Timer - tms, "0.000s ")
- End Sub
- Sub dgZH(s$, i%, t%)
- Dim j%, ii%, jj%
- For j = i + 1 To m
- If t < n Then
- Call dgZH(s & j & ",", j, t + 1)
- Else
- k = k + 1
- p = Split(s & j, ",")
- For ii = 0 To UBound(p)
- For jj = 1 To l
- jg(k, ii * l + jj) = sj(p(ii), jj)
- Next
- Next
- End If
- Next
- ' Application.StatusBar = s
- End Sub
复制代码 |
|