项目Euler - #1 Python错误解决方案

时间:2016-06-13 09:16:06

标签: python recursion sum project

我对编码总体上比较新,并启动了Project Euler以使我的编码更进一步。花了一些时间考虑如何自己处理第一个问题并尝试使用递归函数,不幸的是总是得到同样的错误(266333)。我错过了什么?要学习哪些大错?

最初的问题是:"如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23。

找出1000或以下所有3或5的倍数之和。"

def function(i, j, h, k):
    if j < 1000 and k < 1000:
        i = i + j
        h = h + k
        return function(i, j+3, h, k+5)
    elif j < 1000 and k >= 1000:
        i = i + j
        return function(i, j+3, h, k)
    elif j >= 1000 and k < 1000:
        h = h + k
        return function(i, j, h, k+5)
    else:
        print (i + h)


function(0,0,0,0)

其中i是3的倍数之和,h是5的倍数之和,j是3的倍数,k是5的倍数。

Problem source

2 个答案:

答案 0 :(得分:2)

你的错误在于你包括两次被15整除的数字:一次是3的倍数,一次是5的倍数。

对于它的价值,这里有一个计算这个总和的简洁方法:

sum(i for i in range(1000) if not (i % 3 and i % 5))

答案 1 :(得分:1)

我强烈反对递归,因为它可能适用于少数但不适用于更大的递归,即使解决方案可能有效,它也会教你一个错误的方法。

def euler_1(sum, range_beg, range_end):
    for number in range( range_beg, range_end):
        if (( number % 3 ) == 0) or ((number % 5) == 0):
            sum += number
        else:
            pass

     return sum


print(euler_1( 0, 0, 1000))

这是更加pythonic,可重复使用,更快速,更简单的阅读和纠正。