【发布时间】:2017-03-15 18:51:39
【问题描述】:
我正在尝试获得 500 万个元素的斐波那契数列。
当我将 1000 作为参数传递时,此代码异常中止。
def self.fibo_seq(limit)
result_array = [0,1]
return result_array if limit < 2
while result_array.length <= limit
result_array << result_array[-1] + result_array[-2]
end
return result_array
end
res= Multiple.fibo_seq(5_000_000)
print res
Error: [1] 22382 killed ruby fibo.rb
示例输出:
# >> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, , 1...] upto 5 Million elements
【问题讨论】:
-
溢出,很可能。在大多数语言中,您不能只在变量中使用大量数字。
-
@RadialApps:在 ruby 中你可以。没有任何问题。
-
@SergioTulentsev,我猜你是对的(只是查了一下)。我的第二个猜测是当它变得足够大时,内存不足以分配给更大的数据类型。
-
巨大的数字存储在内存中的成本很高,运行程序并打开另一个选项卡并运行
top -o mem。 -
代码应该正确处理 1000。顺便说一句,
50_00_000是 5,000,000,如果您要使用该符号,则应写为5_000_000。编程时,细节很重要。
标签: ruby-on-rails arrays ruby memory-leaks fibonacci