[Ruby rekurencyjne rozwiązanie] Problem wydawania reszty (Problem plecakowy)

[code=ruby] denominations = [200, 100, 50, 20, 10, 5, 2, 1] def change_money(amount, denominations, denominations_result = []) denomination = denominations.shift denominations_result « amount / denomination amount %= denomination puts denominations_result.inspect change_money(amount, denominations, denominations_result) unless denominations.empty? end change_money(1984, denominations) [/code] Output: [code=plain] [9] [9, 1] [9, 1, 1] [9, 1, 1, 1] [9, 1, 1, 1, 1] [9, 1, 1, 1, 1, 0] [9, 1, 1, 1, 1, 0, 2] [9, 1, 1, 1, 1, 0, 2, 0] [/code]

[code=ruby] denominations = [200, 100, 50, 20, 10, 5, 2, 1]

def change_money(amount, denominations, denominations_result = []) denomination = denominations.shift denominations_result « amount / denomination amount %= denomination

puts denominations_result.inspect

change_money(amount, denominations, denominations_result) unless denominations.empty? end

change_money(1984, denominations) [/code]

Output:

[code=plain] [9] [9, 1] [9, 1, 1] [9, 1, 1, 1] [9, 1, 1, 1, 1] [9, 1, 1, 1, 1, 0] [9, 1, 1, 1, 1, 0, 2] [9, 1, 1, 1, 1, 0, 2, 0] [/code]

Solution with Hash: [code=ruby] denominations = [200, 100, 50, 20, 10, 5, 2, 1]

def change_money_hash(amount, denominations, denominations_result = {}) denomination = denominations.shift denominations_result[denomination] = amount / denomination

if denominations.empty? denominations_result else amount %= denomination change_money_hash(amount, denominations, denominations_result) end end

puts change_money_hash(1984, denominations) // output // {200=>9, 100=>1, 50=>1, 20=>1, 10=>1, 5=>0, 2=>2, 1=>0} [/code]