組み合わせの列挙~再帰~
再帰処理を利用して組み合わせ(3桁の3進数の取りうる値)の列挙をします。
$SIZE = 3 $pos = [] def print_pos print "#{$pos}\n" end def set(i) (0..$SIZE).each { |x| $pos[i] = x if i == $SIZE -1 then print_pos() else set(i+1) end } end set(0)
実行結果です
[0, 0, 0] [0, 0, 1] [0, 0, 2] ~中略~ [3, 3, 2] [3, 3, 3]
繰り返し文で実現することもできますが、再帰で実装しました。
私は、再帰処理はなんとなく頭で理解していても
細かい動きまでイメージできない場合があります。
なので機会があったので実装しました。
再帰は重いから嫌われますが、コードとして美しいなと改めて感じました。