Project Euler-#1 Python错误的解决方案

Project Euler-#1 Python错误的解决方案,python,recursion,sum,project,Python,Recursion,Sum,Project,一般来说,我对编码还比较陌生,并开始了Euler项目,以使我的编码更进一步。我自己花了一些时间思考如何解决第一个问题,并尝试使用递归函数,不幸的是,总是犯同样的错误(266333)。我错过了什么?有什么大错误值得我们学习吗 最初的问题是:“如果我们列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数的总和是23 找出1000以下所有3或5的倍数之和。” def功能(i、j、h、k): 如果j

一般来说,我对编码还比较陌生,并开始了Euler项目,以使我的编码更进一步。我自己花了一些时间思考如何解决第一个问题,并尝试使用递归函数,不幸的是,总是犯同样的错误(266333)。我错过了什么?有什么大错误值得我们学习吗

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

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

def功能(i、j、h、k):
如果j<1000且k<1000:
i=i+j
h=h+k
返回函数(i,j+3,h,k+5)
如果j<1000且k>=1000:
i=i+j
返回函数(i,j+3,h,k)
如果j>=1000且k<1000:
h=h+k
返回函数(i,j,h,k+5)
其他:
打印(i+h)
函数(0,0,0,0)
其中i是3的倍数之和,h是5的倍数之和,j是3的倍数,k是5的倍数


您的错误是,您将可被15整除的数字包括两次:一次是3的倍数,一次是5的倍数

值得一提的是,这里有一个简单的计算方法:

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

您的错误是,您将可被15整除的数字包括两次:一次是3的倍数,一次是5的倍数

值得一提的是,这里有一个简单的计算方法:

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

我强烈建议不要使用递归,因为它可能适用于较小的数字,但不适用于较大的数字,即使解决方案可行,它也会教给您一种错误的方法

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))

这是一个更具python风格的、可重用的、更快的、更简单的阅读和更正方法。

我强烈建议不要使用递归,因为它可能适用于较小的数字,但不适用于较大的数字,即使解决方案可行,它也会教给你一个错误的方法

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))

这是一个更具python风格的、可重用的、更快的、更易于阅读和更正的代码。

您的通用变量名使这段代码很难理解。
i
j
h
k
是什么意思?必须使用递归,请发布问题的链接好吗?您的通用变量名使此代码很难理解。
i
j
h
k
是什么意思?必须使用递归,请您发布问题的链接好吗?是的,我现在得到了正确的答案,我用初始if语句检查公共倍数来解决它。
如果j%5==0:返回函数(i,j+3,h,k)
是的,我现在得到了正确的答案,我用初始if语句检查公共倍数来解决它。
如果j%5==0:返回函数(i,j+3,h,k)
这对我来说更容易理解,在开始这个问题时,我完全忽略了模数。非常感谢你!这对我来说更容易理解,当我开始这个问题时,我完全忽略了这一点。非常感谢你!