我对编码总体上比较新,并启动了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的倍数。
答案 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,可重复使用,更快速,更简单的阅读和纠正。