Sub Distribute(ByVal m As Long, ByVal n As Long)
Dim a() As Long
ReDim a(n - 1)
TryOne a, n, 0, m
End Sub
Sub TryOne(a() As Long, ByVal n As Long, ByVal i As Long, ByVal remnant As Long)
If remnant = 0 Then
PrintOne a, n
Exit Sub
End If
If i = (n - 1) Then
a(i) = remnant
PrintOne a, n
a(i) = 0
Exit Sub
End If
Dim j As Long
For j = 0 To remnant
a(i) = j
TryOne a, n, i + 1, remnant - j
Next
a(i) = 0
End Sub
Sub PrintOne(a() As Long, ByVal n As Long)
Dim i As Long
For i = 0 To n - 1
If i > 0 Then Debug.Print ",";
Debug.Print a(i);
Next
Debug.Print
End Sub