Après avoir vu l'article "J'ai essayé de résoudre le problème de séquence tribonacci avec Ruby (délai de 10 minutes)", j'ai pensé que je voulais l'écrire récursivement. Donc Kakiko ... est un mensonge, et je ne savais pas vraiment ce qu'était Tribonacci, alors je l'ai écrit à la hâte.
# 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
Qu'en est-il de l'optimisation des appels de queue? Ou que diriez-vous de faire un mémo? Ou, écrivez dans une boucle au lieu de récursif en premier lieu! Écrivez en Haskell ou Elm car c'est une belle opportunité! , Souhaitez-vous l'écrire avec un itérateur? Ignorez une telle voix intérieure. Parce que je ne suis pas sûr de les faire en 10 minutes!
Fonction de répétition Ruby pour Fibonatch, Tribonatch, Tetranatch!
Recommended Posts