「Rubyでトリボナッチ数列の問題を解いてみた(制限時間10分)」という記事を見て、再帰で書きたいな、と思ったのでカキコ... というのは嘘で、本当はトリボナッチっていうものを知らなかったので、焦って書きました。
コード
# Tribonacci
def tribonacci n
if n == 1
return 1
elsif n == 2
return 1
elsif n == 3
return 2
else
return tribonacci(n - 3) + tribonacci(n - 2) + tribonacci(n - 1)
end
end
p (1..10).map{|n| tribonacci n } # => [1, 1, 2, 4, 7, 13, 24, 44, 81, 149]
# Unit Test
require 'test/unit'
class TC_Foo < Test::Unit::TestCase
def test_one
assert_equal tribonacci(1), 1
end
def test_two
assert_equal tribonacci(2), 1
end
def test_three
assert_equal tribonacci(3), 2
end
def test_ten
assert_equal tribonacci(10), 149
end
end
おわりに
末尾呼出し最適化は?とか、メモ化は?とか、そもそも再帰でなくてループで書けよ!、せっかくの機会だから Haskell か Elm で書けよ!、イテレーターで書けば?とかそんな内なる声は無視する。なぜなら、自分は10分でそれらをやる自信がないからね!