Nachdem ich den Artikel "Ich habe versucht, das Tribonacci-Sequenzproblem mit Ruby zu lösen (Zeitlimit 10 Minuten)" gelesen hatte, dachte ich, ich wollte ihn rekursiv schreiben. Also Kakiko ... ist eine Lüge, und ich wusste nicht wirklich, was Tribonacci ist, also habe ich es in Eile geschrieben.
# 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
Was ist mit der Tail-Call-Optimierung? Oder wie wäre es mit einem Memo? Oder schreiben Sie in einer Schleife anstatt in erster Linie rekursiv! Schreiben Sie in Haskell oder Elm, weil es eine großartige Gelegenheit ist! , Wenn Sie mit einem Iterator schreiben? Ignoriere eine solche innere Stimme. Weil ich nicht sicher bin, sie in 10 Minuten zu machen!
Ruby-Wiederholungsfunktion für Fibonatch, Tribonatch, Tetranatch!
Recommended Posts