Collatz予想の収束までのステップ数の最大値

http://ll.jus.or.jp/2006/blog/doukaku2
LLRingの「キミならどう書く 2.0」でお題がでてたので、rubyで書いてみた。素朴なメモ化以外の工夫なし。コメントはずすとメモした値が見れます。

@memo = {1=>1}
def g(n)
  @memo[n] ||= 1 + if (n % 2) == 0 then g(n/2) else g(n*3+1) end
end

def h(n)
  max = k = 1
  (2..n).each do |i|
    step = g(i)
    next if max > step
    k = i
    max = step
  end
  return k
end

k = h(ARGV.shift.to_i)
#p @memo.sort
p k

あー、Nabetaniさん(http://d.hatena.ne.jp/Nabetani/20060711#p1)のとほとんど同じコードだな、これ。