Conjetura de Collatz (mediante función recursiva)

Nicolás García de Arce

/* La conjetura de Collatz dice que si a un número le aplicas lo siguiente durante cierta cantidad de pasos:

si es par, dividirlo entre 2;

si es impar, multiplicarlo por 3 y sumar 1;

en algún momento siempre llegarás a 1.

Aún no se ha conseguido probar que sea cierto o falso, pero con este programa se pueden buscar contraejemplos: */

#include <iostream>
using namespace std;

// devuelve el numero de pasos que tarda en llegar a 1
int collatz(unsigned long long int n) 
{
    static int pasos = 0;
    if (n==1) {return pasos;}
    pasos++;
    if (n%2==0) {
        n = n/2;
        return collatz(n);
    }
    else {
        n = 3*n+1;
        return collatz(n);
    }
}

int main()
{
    unsigned long long int n; 
   // valor máximo del unsigned long long int: 18446744073709551615
    cout << "Hola! Con este programa podras buscar contraejemplos de la conjetura de Collatz." << endl;
    cout << "Introduce un numero y el programa te dira en cuantos pasos se tarda en llegar a 1." << endl;
    cout << "Si el programa se queda colgado, enhorabuena, eres la primera persona en encontrar un contraejemplo!" << endl;
    cout << "(o quizas hayas metido un numero demasiado grande para el programa...)" << endl << endl;
    cout << "Introduce un numero entre 1 y 18446744073709551615: ";
    cin >> n;
    cout << "Tarda " << collatz(n) << " pasos en llegar al 1... Intentalo de nuevo!";
    return 0;
}

Acerca de programacion1z

Curso de introducción a la programación en C
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s