我不能让我的Fibonacci序列在Ruby中通过这个rspec测试。我该怎么办呢?

时间:2015-09-11 16:03:43

标签: ruby-on-rails ruby rspec

我接受了测试,在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

我如何更改以使其满足测试?

1 个答案:

答案 0 :(得分:1)

您拥有的generate方法是一种实例方法,但您的测试正在测试类方法。要将方法转换为Ruby中的类方法,请在方法签名中使用self关键字,如下所示:

def self.generate(n)

或在签名中使用类名:

def Fibonacci.generate(n)

此外,测试本身大多数都没用,需要重写。

相关问题