Proyecto Euler – # 1 solución incorrecta Python

Soy relativamente nuevo en la encoding en general y comencé el Proyecto Euler para llevar mi encoding un poco más lejos. Pasé algún tiempo pensando en cómo trabajar la primera pregunta por mi cuenta y traté de usar funciones recursivas, desafortunadamente siempre cometiendo el mismo error (266333). ¿Qué me perdí? ¿Algún gran error del que aprender?

La pregunta original dice: “Si enumeramos todos los números naturales por debajo de 10 que son múltiplos de 3 o 5, obtenemos 3, 5, 6 y 9. La sum de estos múltiplos es 23.

Encuentra la sum de todos los múltiplos de 3 o 5 debajo de 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: 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) 

Donde i es la sum de los múltiplos de 3, h es la sum de los múltiplos de 5, j es múltiplos de 3 y k es múltiplos de 5.

Fuente de problemas

Su error es que está incluyendo números divisibles por 15 dos veces: una vez como un múltiplo de 3, y una vez como un múltiplo de 5.

Para lo que vale, aquí hay una forma concisa de calcular esta sum:

 sum(i for i in range(1000) if not (i % 3 and i % 5)) 

Recomiendo encarecidamente que no se produzca una recursión, ya que podría funcionar para un número pequeño pero no para los más grandes, e incluso si la solución pudiera funcionar, le enseñaría un enfoque incorrecto.

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

Esto es más python, reutilizable, más rápido y más fácil de leer y corregir.