我接受了测试,在Ruby中传递Fibonacci序列,从那以后我一直在寻找答案。我无法想出任何令人满意的东西,并且最接近'我必须解决它(在看到Fibonacci上的东西之后):
class Fibonacci
def generate( n )
return n if (0..1).include? n
( fibonacci( n - 1 ) + fibonacci( n - 2 ) )
end
这是测试:
describe "Fibonacci" do
it "can output the fibonacci sequence for 5 numbers" do
expect(Fibonacci.generate(5)).to eql([0,1,1,2,3])
expect(Fibonacci.generate(5).last).to eql(3)
expect(Fibonacci.generate(5)[-2]).to eql(2)
expect(Fibonacci.generate(5)[2]).to eql(1)
end
it "can output the fibonacci sequence for 20 numbers" do
expect(Fibonacci.generate(20)).to eql([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181])
expect(Fibonacci.generate(20).last).to eql(4181)
expect(Fibonacci.generate(20)[-2]).to eql(2584)
expect(Fibonacci.generate(20)[5]).to eql(5)
expect(Fibonacci.generate(20)[6]).to eql(8)
expect(Fibonacci.generate(20)[7]).to eql(13)
expect(Fibonacci.generate(20)[-3]).to eql(1597)
end
it "can output the fibonacci sequence for 50 numbers" do
expect(Fibonacci.generate(50)).to eql([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049])
expect(Fibonacci.generate(50).last).to eql(7778742049)
expect(Fibonacci.generate(50).count).to eql(50)
expect(Fibonacci.generate(50)[24]).to eql(46368)
expect(Fibonacci.generate(50)[12]).to eql(144)
end
end
我如何更改以使其满足测试?
答案 0 :(得分:1)
您拥有的generate
方法是一种实例方法,但您的测试正在测试类方法。要将方法转换为Ruby中的类方法,请在方法签名中使用self
关键字,如下所示:
def self.generate(n)
或在签名中使用类名:
def Fibonacci.generate(n)
此外,测试本身大多数都没用,需要重写。