1

Conjetura de Collatz en Javascript con bucle do while

En este tutorial vamos a aprender a hacer la famosa conjetura de Collatz en Javascript.

¿Qué es la conjetura de Collatz?

Ésta nos dice que no existe número entero positivo que no acabe en el ciclo 4, 2, 1… tras aplicarle ciertas operaciones. Las cuales son:

  • Si el número es par, se divide entre dos.

  • Si el número es impar, se multiplica por tres y se le suma uno.

Debido a la segunda operación es que a este problema también se le conoce como 3n + 1.

No obstante, empecemos ya con el código.

functioncollatz(number){
    console.log(`Tu número es ${number}`);

    let num = 1;
    
    do{

        if(number%2 == 0){
            number = number/2;
        }
        else{
            number = (3*number) + 1
        }

        console.log(`Iteración número ${num} es igual a ${number}`);
        num ++
    }while(number != 1)

    console.log(`Tomó ${num} iteraciones para llegar al bucle 4, 2, 1`);
}

collatz(20)

En esta primera parte se utilizará un bucle ’do while’ para realizar la conjetura. Considero que este bucle es el que ofrece la manera más sencilla para este ejercicio.

console.log(`Tu número es ${number}`);

let num = 1;

La primera línea de la función se utiliza para mostrar en consola el número escogido para realizar la conjetura de Collatz. Por si a alguien no le queda claro ${number} se utiliza para referenciar variables dentro de un string sin necesidad de concatenar. (NOTA: Para utilizar ${number} es necesario utilizar las comillas invertidas ``)

La segunda línea es la declaración e inicialización de la variable que se utilizará para contar el número de iteraciones que toma para llegar al bucle 4, 2, 1.

do{

        if(number%2 == 0){
            number = number/2;
        }
        else{
            number = (3*number) + 1
        }

        console.log(`Iteración número ${num} es igual a ${number}`);
        num ++

   	 }while(number != 1)

Iniciamos con el bucle como tal. Recordemos que el bucle ’do while’ va a realizar todo lo que esté dentro del ‘do’ siempre que se cumpla la condición del ‘while’. Por ende, el ‘if’ dentro del ‘do’ es el encargado de revisar si la primera regla de la conjetura se cumple, si no es así, pasa al ‘else’ que va a aplicar la segunda regla de la conjetura. Una vez hecho lo anterior, se imprime en consola el número de iteración por la que va el ciclo y el valor correspondiente de number a esa iteración. El bucle acaba cuando el valor de number llega a 1.

console.log(`Tomó ${num} iteraciones para llegar al bucle 4, 2, 1`);

Esta línea se ejecuta tras la finalización del bucle para contar la cantidad de iteraciones necesarias para llegar al bucle 4, 2, 1.

Tu número es 20 
Iteración número 1 es igual a 10 
Iteración número 2 es igual a 5 
Iteración número 3 es igual a 16 
Iteración número 4 es igual a 8 
Iteración número 5 es igual a 4 
Iteración número 6 es igual a 2 
Iteración número 7 es igual a 1 
Tomó 8 iteraciones para llegar al bucle 4, 2, 1

Si el código se ejecuta sin problemas, deberías obtener un resultado como el de arriba.

Espero este tutorial te sea de utilidad. Muchas gracias por leer

Escribe tu comentario
+ 2