2012-07-23 51 views
0

我想生成红宝石斐波纳契数列,直至最大击中最大值说50000 我写了下面的代码片段:而条件不断注入红宝石

high = 50000 
arr = [0, 1] 

while arr.last < high do 
    arr.inject{|a, i| arr.push(arr[-2] + arr[-1])} 
end 

puts arr.last 

这会导致停止程序。 我其实是新来的红宝石,有没有一种很好的方法来解决ifs,而在inject在红宝石相同的声明? 对于我正在使用的上述方法,有什么更好的方法?

+0

看看[这个问题](http://stackoverflow.com/questions/6418524/fibonacci-one-liner)一些其他的方法来生成Ruby中的斐波那契数列。 – mikej 2012-07-23 20:34:05

+0

问题不在于关于fibo序列,更多的是关于使用注射附近的条件。 – user993563 2012-07-23 20:35:33

+0

@ user993563:问题在于注入对于您显示的代码片段(生成斐波那契值)没有任何用处。 – tokland 2012-07-23 20:37:05

回答

2

您正在使用inject没有明显的原因,while + <<有足够的积累值:

fibs = [0, 1] 
while fibs.last < 50_000 
    fibs << fibs[-2] + fibs[-1] 
end 
fibs.last # 75025 

记住inject折叠收藏,你有没有收集到这里折,你生成一个, inject不会帮助你。

+0

是的,我正在生成一个集合,但是如果在那个集合周围有简单的,继续下去,直到你达到最大值,我可以把条件放在注入附近,否则不写给我更多的红宝石,它看起来相当垃圾;-) – user993563 2012-07-23 20:36:49