-1

最大値が 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

これにより、プログラムが停止します。私は実際にはルビーに慣れていinjectません。ルビーの同じステートメントで 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 に答える