Tôi đã phải thiết kế một phương pháp lấp đầy nhiều bộ giá đỡ có chiều cao cố định nhất định với các đơn vị riêng lẻ được gọi là MCC. Mỗi đơn vị đi trong giá có kích thước khác nhau, vì vậy mục đích là sử dụng càng ít giá đỡ càng tốt và lấp đầy các giá một cách tối ưu với chiều cao của mỗi đơn vị – được sử dụng một hàm đệ quy để tính toán cách tối ưu để lấp đầy các giá trong khi sử dụng càng ít giá đỡ khả thi. Đây là một phương pháp để tính một “bài toán tổng hợp con”. Tôi sẽ đính kèm toàn bộ dự án vẽ các đơn vị, tuy nhiên chức năng chính là những gì tôi quan tâm – tiếp theo là hàm đệ quy và phương thức của nó để gọi.

Public fR As Boolean Function RealEqual (A, B, Epsilon tùy chọn As Double = 0,00000001)

RealEqual = Abs (A – B) ⇐ Epsilon End Function Function ExtendRslt (CurrRslt, NewVal, Separator)

If CurrRslt = “” Then ExtendRslt = NewVal _ Else ExtendRslt = CurrRslt & Separator & NewVal End Function Sub recursiveMatch (ByVal MaxSoln As Integer, ByVal TargetVal, InArr (), _ ByVal HaveRandomNegative As Boolean, _ ByVal As Curger, _ ByVal , ByVal Epsilon As Double, _ ByRef Rslt (), ByVal CurrRslt As String, ByVal Separator As String)

Dim I As Integer For I = CurrIdx To UBound (InArr, 2)

If RealEqual (CurrTotal + InArr (2, I), TargetVal, Epsilon) Then Rslt (UBound (Rslt)) = (CurrTotal + InArr (2, I)) _ & Separator & ExtendRslt (CurrRslt, I, Separator)

fR = True If MaxSoln = 0 Then If UBound (Rslt) Mod 100 = 0 Then Debug.Print “Rslt (” & UBound (Rslt) & “) =” & Rslt (UBound (Rslt))

Khác ‘If UBound (Rslt)> = MaxSoln Then Exit Sub If fR = True Then Exit Sub End If ReDim Preserve Rslt (UBound (Rslt) + 1)

ElseIf IIf (HaveRandomNegative, False, CurrTotal + InArr (2, I)> TargetVal + Epsilon) Sau đó ElseIf CurrIdx <UBound (InArr, 2) Sau đó đệ quyMatch MaxSoln, TargetVal, InArr (), HaveRandom I + 1, _ Curcumin InArr (2, I), Epsilon, Rslt (), _ ExtendRslt (CurrRslt, I, Separator), _ Separator If MaxSoln <> 0 Then If fR = True Then Exit Sub Else ‘không khớp Kết thúc Nếu Tiếp theo Tôi Kết thúc Sub Được gọi bởi recursiveMatch MaxSoln, TargetVal, InArr, HaveRandomNegative, _ LBound (InArr), 0, 0,00000001, _ Rslt, “”, “,”