代码中的内存错误,用于查找python

时间:2015-12-08 08:15:46

标签: python python-2.7

我正在编写用于在Fibonacci序列中查找偶数项的总和的代码,其值不超过四百万。代码适用于高达40k的值但是我找到了一个内存错误,因为找到多达400万可以有人帮我解决问题

我的代码是:

def fib(x):
    l=[0,1]
    m=[]
    a=0
    c=0
    b=1
    while len(l) <=x:
             d=c+b
             c=b
             b=d
             l.append(d)
             if d%2==0: 
                    m.append(d)
                    a=a+d
    print 
    print a 
    print m

4 个答案:

答案 0 :(得分:1)

只是为了澄清我的理解:你正在寻找一个函数,它返回斐波那契数列中所有偶数的总和,最多可达400万。尝试使用两个单独的函数。

斐波纳契序列中给定数字的第一个函数

    def fib(n):
        a = 0
        b = 1
        for e in range(n):
            old_a = a
            a = b
            b = old_a + b
        return a

第二个函数,用于调用前面的函数(并使用计数,而不是列表,以便节省内存。)

    def even_sum(t):
        total = 0
        for x in range(t):
            fib_x = fib(x)
            if fib_x % 2 == 0:
                total += fib_x
                print fib_x     # <-- this line is optional,
                                # include it if you want to see each
                                # even number printed.
        return total

然后调用你的函数。例如:

print even_sum(100)

给了我们这个答案:

286573922006908542050

答案 1 :(得分:0)

试试这个:

def sum_fib(x):
    a = 0
    c = 0
    b = 1
    l = 2
    while l <=x:
             d = c + b
             c = b
             b = d
             l += 1
             # yoda conditions check
             if 0 == d % 2: # using binary should be faster (0 == d & 1)
                    a += d
    print 
    print a 

答案 2 :(得分:0)

如评论中所述,用计数器替换l。如果你需要打印所有偶数的fib数,请保留m,否则将它们全部一起删除。

初始化计数

count = 2

每次围绕while循环增加计数1.

答案 3 :(得分:0)

这是一个消除不必要列表的版本,正如我在评论中所描述的那样。请注意,您仍然会有一个指数增长的总和,这是不可避免的:

def fib(x):
    lc=2
    mc=0
    a=0
    c=0
    b=1
    while lc <=x:
        d=c+b
        c=b
        b=d
        lc += 1
        if d%2==0:
            mc += 1
            a += d
    print
    print a
    print mc