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

Это более питонно, многократно, быстрее и проще для чтения и исправления.

Другие вопросы по тегам