在尝试运行此代码时:
l = 1000000
w = [1, 1]
for i in range(2, l):
w.append(w[-1] + w[-2])
Run Code Online (Sandbox Code Playgroud)
电脑挂起,蓝屏死机出现.我得到的唯一信息是关于记忆管理.问题出现在Python 2.7和3.4版本中.
代码适用于l = 100000.
有人能解释我究竟是为什么吗?我在Active Python中使用64位64位,Python 2.7.8 64位.
编辑:
这是R代码,效果很好:
len <- 1000000
fibvals <- numeric(len)
fibvals[1] <- 1
fibvals[2] <- 1
for (i in 3:len) {
fibvals[i] <- fibvals[i-1]+fibvals[i-2]
}
Run Code Online (Sandbox Code Playgroud)
你所产生的数字比你想象的还要多.例如,这是最后一个内存的大小:
>>> a, b = 1, 1
>>> for i in xrange(2, 1000000):
... a, b = b, a+b
...
>>> sys.getsizeof(b)
92592
Run Code Online (Sandbox Code Playgroud)
对于一个整数,这是92千字节.所有这些放在一起的位置在46-ish千兆字节附近,而你只有16千兆字节.
你的R代码使用了64位浮点数,它在第1476个数字附近迅速溢出到无穷大.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |