我正在嘗試編寫一個值爲N
的方法,並返回三個整數N/2
,N/3
和N/4
向下舍入。它一直把它們取回,直到只有零。數組上的遞歸調用映射?
def crazy_coins(n)
coins = Array.new
coins.push(n.to_a)
generate = Proc.new { |x|
temp = []
count = 2
while count < 5
x = n/count
temp << x
count += 1
end
return temp
}
coins.map!(&generate)
end
輸出:
crazy_coins(5)
# => [[2, 1, 1]]
成功輸出應該類似於:
crazy_coins(5)
11
=> [2, 1, 1]
=> [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
=> [[[0, 0, 0], 0, 0], [0, 0, 0], [0, 0, 0]]
什麼可能是每個元素再次調用coins.map!
(遞歸也許),直到所有coins[i][j] == 0
的最佳方式?
我試圖調用硬幣[0] .MAP!(&生成),但結果爲[[2,1,1],[2,1,1],[2,1,1]] 爲什麼它不會用新數組替換現有值?
你明白了 - 在一個進程中'return'聲明將在其中PROC被稱爲上下文返回,而不僅僅是PROC本身。實際上你根本不需要顯式的return語句 - 只要把'temp'作爲proc中的最後一個語句,它就會被返回。 –
好的謝謝,這是可行的,但當試圖調用硬幣[0] .map!(&生成)嘗試替換[[2,1,1]]值時,結果爲[[2,1,1], [2,1,1],[2,1,1]] ..怎麼來的地圖!是不是用一個新的數組替換單個值? – rogueSF
地圖!是一種改變接收器的方法。這並不意味着要返回一個新的數組。 – vgoff