-1

我想在 ruby​​ 中生成斐波那契数列,直到最大值达到最大值,比如 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

这会导致程序停止。我实际上是 ruby​​ 的新手,inject在 ruby​​ 的同一个语句中是否有一种解决 ifs 和 while 的好方法?对于我正在使用的上述方法,有什么更好的方法。

4

1 回答 1

2

inject没有明显原因使用,while+<<足以累积值:

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

请记住,inject折叠一个集合,你在这里没有要折叠的集合,你正在生成一个,inject不会帮助你。

于 2012-07-23T20:30:58.683 回答