繁体   English   中英

我无法让我的斐波那契数列在 Ruby 中通过这个 rspec 测试。 我该怎么做?

[英]I can't get my Fibonacci sequence to pass this rspec test in Ruby. How do I go about it?

我接受了在 Ruby 中传递斐波那契数列的测试,从那时起我一直在寻找答案。 我想不出任何令人满意的东西,我必须解决的“最接近的”是(在 SO 上的斐波那契上看到一些东西之后):

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

我要更改什么才能使其满足测试?

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

def self.generate(n)

或在签名中使用类名,如下所示:

def Fibonacci.generate(n)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM