def f(m, n, r=[]) if m == 1 puts (r+[n]) * " " return end c = r.last||1 loop{ d = n - c break if c > d f(m-1, d, r+[c]) c += 1 } end M = 3 N = gets.to_i f(M, N)