I need to get all the possible number combinations from denom_arr which equal the amt.
denom_arr = [4,3,1]
amt = 10
This case would produce:
- [4, 4, 1, 1]
- [3, 3, 3, 1]
- [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
- [4, 3, 1, 1, 1]
- [4, 3, 3]
- . . . (other cases...)
Problem is the code I wrote is breaking after 1-3 and I'm not sure how to make it loop over the same index to get case 4-6+
set, sets = [], []
i = 0
loop do
i = 0 if denom_arr[i].nil? 
  loop do
    set << denom_arr[i]
    break if set.inject(:+) > amt
  end
  set.pop if set.inject(:+) > amt
  if set.inject(:+) == amt
    sets << set
    set = []
    denom_arr.shift
  end
i += 1
sets
break if denom_arr.empty?
end 
UPDATE
I know this can be done with recursion with memoization/dynamic programming techniques, but I am trying to do this strictly in a loop for the sake of testing a theory.
 
    