递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合

  1. Dim mycount As Long, s(1 To 65536, 1 To 1), num As Long
  2. Sub main()
  3. Dim a, b
  4. num = 45
  5. b = Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
  6. ReDim a(num)
  7. a(0) = b(0)
  8. search num, 0, 0, a, b
  9. [a1].Resize(65536) = s
  10. MsgBox "OK", , "Total count=" & mycount
  11. End Sub
  12. Sub search(ByVal n As LongByVal j As LongByVal index As LongByRef a, ByRef b)
  13. For i = index To UBound(b)
  14. If n = b(i) Then
  15. mycount = mycount + 1
  16. a(j) = b(i)
  17. For k = 0 To j
  18. s(mycount, 1) = s(mycount, 1) & " " & a(k)
  19. Next
  20. s(mycount, 1) = Replace(Trim(s(mycount, 1)), " ""+") & "=" & num
  21. Else
  22. a(j) = b(i)
  23. If n >= b(i) Then search n - b(i), j + 1, i, a, b
  24. End If
  25. Next
  26. End Sub
原文地址:https://www.cnblogs.com/fengju/p/6336261.html