Lo primero que debes decir es que tienes un gran error que es un gran ejemplo de por qué nos gusta usar muchas variables. Cada vez que aplicas una regla a i, la estás sobrescribiendo. Esto significa que cuando viene a incrementarlo para probar el siguiente número inicial, en realidad está incrementando el final de la última cadena, que es 1. ¡Por lo tanto, solo está calculando las cadenas para 1 y 2! Guarde el número de inicio en otra variable tan pronto como comience una nueva cadena, luego cárguelo de nuevo en I una vez que haya terminado la cadena. Esto en realidad resulta en un bucle infinito, porque ni 1 ni 2 son mayores que la condición de salida de 1,000,000.
Todavía no hay un delegado que este programa saldrá. El Proyecto Euler 14 dice que no se ha demostrado que todos los números iniciales lleguen a 1. Su programa podría haber encontrado uno que no lo hace y está atascado tratando de llegar a 1. Sugeriría agregar una condición de salida cuya longitud sea menor que , digamos, 10000. También debe almacenar y generar el número inicial que le proporcionó la cadena más larga. Cuando su programa salga (porque ahora sabemos que lo hará) verá si algún número alcanzó su límite y ejecuta solo los números que lo hicieron. Con un poco más de resultados para estos que muestran los pasos intermedios, podrá ver si está golpeando algún tipo de patrón que no se reduce a 1.
Además, una nota rápida sobre la eficiencia algorítmica: ha notado correctamente que este es un enfoque de fuerza bruta y altamente ineficiente. Un ejercicio útil para usted (una vez que tenga este trabajo) podría ser un enfoque de programación dinámica, donde almacena el número de pasos para que cada número llegue a 1, y luego lo usa para no tener que calcular la cadena para cada número que prueba. Por ejemplo, si ya sabe que 13 toma 10 pasos para llegar a 1, puede agregar 10 a la longitud de la cadena cada vez que un número se reduce a 13.
- ¿Puedo decir que [matemáticas] 4 ^ {2n} = O (4 ^ {2n}) [/ matemáticas]?
- ¿Puedes descifrar el código ’34llo2yna24is4ll7a7ndilov46uor7′?
- ¿Cuál será la complejidad de T (n) = 2T (n-1) – 1 usando el método de sustitución?
- Cómo encontrar el número máximo de divisores de un número menor que N
- ¿Cuál es la factorización prima de 2500?