Project Euler - #1 Python неправильное решение
Я относительно новичок в программировании в целом и запустил Project Euler, чтобы немного продвинуть свое программирование. Потратил некоторое время на размышления о том, как решить первый вопрос самостоятельно, и попытался использовать рекурсивные функции, к сожалению, всегда получая одну и ту же ошибку (266333). Что я упустил? Есть большая ошибка, чтобы учиться?
Исходный вопрос гласит: "Если мы перечислим все натуральные числа ниже 10, кратные 3 или 5, мы получим 3, 5, 6 и 9. Сумма этих кратных равна 23.
Найдите сумму всех кратных 3 или 5 ниже 1000."
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.
2 ответа
Ваша ошибка состоит в том, что вы включаете числа, кратные 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))
Это более питонно, многократно, быстрее и проще для чтения и исправления.