コラッツの問題


rubyの練習
コンピューターを使うときには、如何にプログラムを短く美しく書くかが重要である。試しに、今年のセンターの数学の問題のコンピューターのところにでていたコラッツの問題の1になるまでの回数を求める関数を書いてみた。

def col(n)
  (n<2)?0:col((n%2==0)?n/2:3*n+1)+1
end

再帰を使う以外は、全くもって工夫が無いものになってしまった。速度を考えると

def col(n)
  (n<2)?0:col((n[0]==0)?n>>1:3*n+1)+1
end

の方が速くなると思ったが、遅くなってしまった。なぜだろう。2byteも増えたし。なかなか満足のいくコードは書けないものだ。