@m_seki の

I like ruby tooから引っ越し

組合せの前に階乗を準備

仕掛けはこれ。Hashのデフォルト値を求めるブロックで計算する作戦。おまけに結果はHashが保持してくれる。

fact = Hash.new {|h, k| h[k] = k * h[k - 1]}
fact[1] = 1


irbで仕掛けを試す。

four:~ mas$ irb --simple-prompt
>> fact = Hash.new {|h, k| h[k] = k * h[k - 1]}
=> {}
>> fact[1] = 1
=> 1
>> fact
=> {1=>1}
>> fact[5]
=> 120
>> fact
=> {5=>120, 1=>1, 2=>2, 3=>6, 4=>24}
>> fact[20]
=> 2432902008176640000
>> fact.keys.sort
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>