как-то так.. адаптировано с
http://acm.mipt.ru/twiki/bin/view/Curriculum/FIVTLecturesTerm1Lecture6 /*
n - осталось набрать слагаемых на сумму n
k - слагаемые не больше k
i - номер очередного слагаемого
В массиве a, начиная с i-го элемента, перебрать все возможные
варианты разложения числа n на слагаемые, не превосходящие k.
*/
function dec(n, k, i) {
if n < 0
exit function
if n = 0
// Просьба разложить 0 означает, что раскладывать уже нечего и
// и уже нет остаточного значения, котрое нужно разложить.
// Значит в массиве {a[0], a[1], ... a[i-1]} находится некоторое готовое разложение
// исходного числа n = m.
dim j as integer
for j = 0 to i-1
dec=dec & a[j]
next
dec=dec & vbCrLf
else
if n - k >= 0
a[i] = k; // фиксируем i-ое слагаемое
dec(n - k, k, i + 1);
end if
if ( k - 1 > 0)
dec(n, k - 1, i);
end if
end if
end function
sub main() {
dim a()
m=Input("Введите число");
redim a(m)
for i = 0 to i -1
a[i] = 0;
next
msgbox("Варианты суммирования для числа "+cstr(m)+": "+dec(m, m, 0))
end sub