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