Как избежать ручной установки начального значения переменной в рекурсивной функции?

Я нашел это решение для проекта Эйлера 5 (Каково наименьшее положительное число, которое без остатка делится на все числа от 1 до 20?) с переменным диапазоном целочисленных значений для равномерного деления:

def Euler5(start, end, counter):
    x = counter
    while start <= end:
        if x%counter == x%start:
            return Euler5(start+1, end, x)
        else:
            x += counter
    return x

Однако мне нужно вручную установить счетчик на наименьшее целочисленное значение (начальное значение counter = start). Есть ли способ сделать это автоматически и сохранить алгоритм?


person petruz    schedule 07.10.2016    source источник


Ответы (1)


Если я вас правильно понял, вы хотите, чтобы counter == start для начального вызова не указывало counter вручную в первом вызове.

Для этого вы можете установить counter в значение по умолчанию None и проверить это в начале функции, установив counter в соответствующее значение, если это так:

def Euler5(start, end, counter=None):
    if counter is None:
        counter = start

    x = counter
    while start <= end:
        if x % counter == x % start:
            return Euler5(start+1, end, x)
        else:
            x += counter
    return x
person dkasak    schedule 07.10.2016
comment
Буду признателен за голосование, если это действительно так. ;) - person dkasak; 08.10.2016
comment
Спасибо, я ценю это. - person dkasak; 08.10.2016