After seeing the article "I tried to solve the tribonacci sequence problem with Ruby (time limit 10 minutes)", I thought I wanted to write it recursively. So Kakiko ... is a lie, and I didn't really know what Tribonacci was, so I wrote it in a hurry.
# 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
What about tail call optimization? Or memoization? Or, write in a loop instead of recursion in the first place! Write in Haskell or Elm because it's a great opportunity! , If you write with an iterator? Ignore such an inner voice. Because I'm not confident of doing them in 10 minutes!
Fibonacci, Tribonacci, Tetranatch with Ruby's repeat function!
Recommended Posts