2016-10-07 2 views
4

Я нашел это решение для проекта Эйлера 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 значение). Есть ли способ автоматически сделать это и поддерживать алгоритм?

ответ

3

Если я понял вас правильно, вы хотите, чтобы 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 
+0

о вы вероятно, правильно – Julius

+0

Буду признателен, если это действительно так. ;) – dkasak

+1

там вы идете ... – Julius

Смежные вопросы