예제 #1
0
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            if (a.Top < b.Top)     // Comprobamos si a es menor a b

            {
                if (a.isEmpty())     // Comprobamos si a está vacia
                {
                    a.push(b.pop()); // En caso de que esté vacia significa que a no es menor a b, sino que a es 0
                }
                else
                {
                    b.push(a.pop()); // Sino a si que es menor a b
                }
            }
            else
            {
                if (a.Top > b.Top)       // Comprobamos si b es menor a a
                {
                    if (b.isEmpty())     // Comprobamos si b está vacia
                    {
                        b.push(a.pop()); // En ese caso b no es menor a a
                    }
                    else
                    {
                        a.push(b.pop()); // Si está llena b es menor a a
                    }
                }
            }
        }
예제 #2
0
 int movimientos = 0;//variable que se utiliza para saber los movimientos totales
 /*TODO: Implementar métodos*/
 public void mover_disco(Pila a, Pila b)
 {
     if (a.isEmpty() == true)//si a esta vacio
     {
         Disco enMovimiento = b.pop();
         Console.WriteLine("mov si a es vacio");//guardamos b enMovimiento
         a.push(enMovimiento);
     }
     else if (b.isEmpty() == true)     //si b esta vacio
     {
         Disco enMovimiento = a.pop(); //guardamos a enMovimiento
         Console.WriteLine("mov si b es vacio");
         b.push(enMovimiento);
     }
     else if (a.elementos[a.elementos.Count - 1].Valor > b.elementos[b.elementos.Count - 1].Valor) //si el elemento a> b
     {
         Disco enMovimiento = b.pop();                                                             //guardamos b enMovimiento
         Console.WriteLine("mov si a > que b ");
         a.push(enMovimiento);
     }
     else
     {
         Disco enMovimiento = a.pop();//guardamos a enMovimiento
         Console.WriteLine("mov si a < que b ");
         b.push(enMovimiento);
     }
 }
예제 #3
0
 /*TODO: Implementar métodos*/
 public void mover_disco(ref Pila a, ref Pila b)
 {
     if ((b.Top == 0) || (a.Top == 0))
     {
         if (b.Top == 0)
         {
             Disco disco = a.pop();
             b.push(disco);
         }
         else
         {
             Disco disco = b.pop();
             a.push(disco);
         }
     }
     else
     {
         if (a.Top > b.Top)
         {
             Disco disco = b.pop();
             a.push(disco);
         }
         else
         {
             Disco disco = a.pop();
             b.push(disco);
         }
     }
 }
예제 #4
0
        public void mover_disco(Pila a, Pila b)
        {
            if (a.Top == b.Top) // Edge case (both are empty)
            {
                return;
            }
            else if (a.Top > b.Top)
            {
                if (b.isEmpty())
                {
                    b.push(a.pop());
                }
                else
                {
                    a.push(b.pop());
                }
            }
            else
            {
                if (a.isEmpty())
                {
                    a.push(b.pop());
                }
                else
                {
                    b.push(a.pop());
                }
            }

            movements++;
        }
예제 #5
0
 /*TODO: Implementar métodos*/
 public void mover_disco(Pila a, Pila b)
 {
     if (b.isEmpty())
     {
         Disco discoA = a.pop();
         b.push(discoA);
         Console.WriteLine("Moviendo de A a B");
     }
     else if (a.isEmpty())
     {
         Disco discoB = b.pop();
         a.push(discoB);
         Console.WriteLine("Moviendo de B a A");
     }
     else
     {
         if (a.Top.Valor < b.Top.Valor)
         {
             Disco discoA = a.pop();
             b.push(discoA);
             Console.WriteLine("Moviendo de A a B");
         }
         else if (b.Top.Valor < a.Top.Valor)
         {
             Disco discoB = b.pop();
             a.push(discoB);
             Console.WriteLine("Moviendo de B a A");
         }
     }
 }
예제 #6
0
 //Mueve el top de la primera pila dada a la segunda, si no se puede,
 //hace lo contrario: de la segunda a la primera.
 public void mover_disco(Pila a, Pila b)
 {
     if (a.Top > b.Top)
     {
         if (b.isEmpty())
         {
             Disco d = a.pop();
             b.push(d);
         }
         else
         {
             Disco d = b.pop();
             a.push(d);
         }
     }
     else if (a.Top < b.Top)
     {
         if (a.isEmpty())
         {
             Disco d = b.pop();
             a.push(d);
         }
         else
         {
             Disco d = a.pop();
             b.push(d);
         }
     }
 }
        //==============================================================================
        // Mover disco
        //==============================================================================

        public static void mover_disco(Pila a, Pila b)
        {
            Disco discoMover = new Disco();

            //==============================================================================
            // Si las pilas estan vacias
            //==============================================================================

            if (a.isEmpty() == true)
            {
                discoMover = b.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de B a A");
                if (discoMover.Valor != 0)
                {
                    a.push(discoMover);
                }
                return;
            }
            else if (b.isEmpty() == true)
            {
                discoMover = a.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de A a B");
                if (discoMover.Valor != 0)
                {
                    b.push(discoMover);
                }
                return;
            }
            //==============================================================================
            // Mira que elemento superior de las pilas es mayor
            //==============================================================================
            else if (a.Top > b.Top)
            {
                discoMover = b.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de B a A");
                if (discoMover.Valor != 0)
                {
                    a.push(discoMover);
                }
                return;
            }
            else if (b.Top > a.Top)
            {
                discoMover = a.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de A a B");
                if (discoMover.Valor != 0)
                {
                    b.push(discoMover);
                }
                return;
            }
        }
예제 #8
0
파일: Hanoi.cs 프로젝트: joacaar/Practica-1
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {//Mover disco de 'a' a 'b' o de 'b' a 'a'
/*            mostrarMovimiento(a);
 *          mostrarMovimiento(b);
 */
            Disco aux = new Disco();

            if (a.isEmpty() && b.isEmpty())
            {
                return;
            }

            if (a.Top > b.Top)
            {// Si el disco top de a es mayor que el de b, entonces solo se podra mover de b hacia a
                if (b.isEmpty())
                {
                    aux = a.pop();
                    b.push(aux);

/*                    mostrarMovimiento(a);
 *                  mostrarMovimiento(b);
 */                 return;
                }

                aux = b.pop();
                a.push(aux);

                /*               mostrarMovimiento(a);
                 *             mostrarMovimiento(b);
                 */}
            else
            {// sino se movera de 'a' a 'b'
                if (a.isEmpty())
                {
                    aux = b.pop();
                    a.push(aux);

                    /*                   mostrarMovimiento(a);
                     *                 mostrarMovimiento(b);
                     */return;
                }
                aux = a.pop();
                b.push(aux);

/*                mostrarMovimiento(a);
 *              mostrarMovimiento(b);
 */         }
        }
예제 #9
0
파일: Hanoi.cs 프로젝트: andrey342/Hanoi
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            Disco mover = new Disco(0); //var donde almacenamos los discos que vamos a mover

            //si en la pila a hay discos
            if (a.isEmpty().Equals(false))
            {
                if (b.isEmpty().Equals(true))
                {                    //si la pila b esta vacia
                    mover = a.pop(); //get y borrar el ultimo disco de la pila
                    b.push(mover);   //mover a la pila b
                }
                else // si en la pila b hay discos
                {
                    if (a.Top < b.Top)   //si el ultimo disco de a es mas pequenyo que el disco de b.
                    {
                        mover = a.pop(); //get y borrar el ultimo disco de la pila
                        b.push(mover);   //mover a la pila b
                    }
                    else
                    {
                        mover = b.pop(); //get y borrar el ultimo disco de la pila b
                        a.push(mover);   //mover b la pila a
                    }
                }
            }
            else if (b.isEmpty().Equals(false))
            {
                if (a.isEmpty().Equals(true))
                {
                    mover = b.pop(); //get y borrar el ultimo disco de la pila
                    a.push(mover);   //mover a la pila a
                }
                else
                {                        //si en la pila a hay discos
                    if (b.Top < a.Top)   //comprobamos si podemos mover el disco
                    {
                        mover = b.pop(); //get y borrar el ultimo disco de la pila
                        a.push(mover);   //mover b la pila a
                    }
                    else
                    {
                        mover = a.pop(); //get y borrar el ultimo disco de la pila b
                        b.push(mover);   //mover a la pila b
                    }
                }
            }
        }
예제 #10
0
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            Disco aux;

            aux = a.pop();
            b.push(aux);
        }
예제 #11
0
        //implementem el mover_disco()
        public void mover_disco(Pila a, Pila b)
        {
            Disco d;

            //si el disco de dalt de la pila a és més xicotet que el de la pila b; o la pila b està buida;
            //i si la pila a conté discos:
            if (((a.Top < b.Top) || (b.isEmpty() == true)) && (a.isEmpty() == false))
            {
                //si hi ha disco, que l'agafe de dalt de a i l'afegisca a la pila b.
                d = a.pop();
                if (d != null)
                {
                    b.push(d);
                }
            }
            //si no: si hi ha, que agafe el disco de dalt de b i l'afegisca a la pila a.
            else
            {
                d = b.pop();
                if (d != null)
                {
                    a.push(d);
                }
            }
        }
예제 #12
0
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            if(b.isEmpty(){
                b[0]=a[a.getSize()-1];
                a.pop();
            }

            else if(a[a.getSize()-1].getValor() < b[b.getSize()-1].getValor(){
                b[b.getSize()-1]=a[a.getSize()-1];
                a.pop();
            }

            else{
                return 0;
            }
        }
예제 #13
0
 /*TODO: Implementar métodos*/
 public static void mover_disco(Pila a, Pila b)
 {/*
   * if (a.isEmpty() && !b.isEmpty())
   * {
   *     // Si una pila esta vacía y la otra no saco un disco y la pongo en la vacía
   *     a.push(b.pop());
   * }
   * else if (b.isEmpty() && !a.isEmpty())
   * {
   *     b.push(a.pop());
   * }
   * else
   * {*/
     // Si ambas pilas tienen discos muevo el disco mas pequeño
     // y lo pongo encima del grande
     if (!a.isEmpty() || !b.isEmpty())
     {
         // Si a tiene un disco mas pequeño que b muevo el disco de a => b
         if (a.isMyTopSmaller(b))
         {
             a.push(b.pop());
         }
         // Si b tiene un disco mas pequeño que a muevo el disco de b => a
         else
         {
             b.push(a.pop());
         }
     }
 }
예제 #14
0
        public static void mover_disco(Pila a, Pila b)
        {
            Disco discoMover;

            // Compruebo si las dos pilas estan vacias
            if (a.isEmpty() && b.isEmpty())
            {
                return;
            }

            // Compruebo si b esta vacia o si b tiene un disco de mayor tamaño que a (todas estas condiciones requieren que a no este vacia)
            else if (b.isEmpty() || b.Top > a.Top && a.isEmpty() == false)
            {
                discoMover = a.pop();
                Console.WriteLine("Moviendo disco de tamaño " + discoMover.Valor.ToString() + " de " + a.Nombre + " a " + b.Nombre);
                if (discoMover.Valor != 0)
                {
                    b.push(discoMover);
                }
                return;
            }

            // Compruebo si a esta vacia o si a tiene un disco de mayor tamaño que b (todas estas condiciones requieren que b no este vacia)
            else if (a.isEmpty() || a.Top > b.Top && b.isEmpty() == false)
            {
                discoMover = b.pop();
                Console.WriteLine("Moviendo disco de tamaño " + discoMover.Valor.ToString() + " de " + b.Nombre + " a " + a.Nombre);
                if (discoMover.Valor != 0)
                {
                    a.push(discoMover);
                }
                return;
            }
        }
예제 #15
0
        public void registrarMovimiento(Pila a, Pila b)
        {
            Disco tmp = a.pop();

            Console.WriteLine("Se ha movido el disco: " + tmp.Valor);
            b.push(tmp);
        }
예제 #16
0
 //TODO: Implementar métodos
 public void mover_disco(Pila a, Pila b)
 {
     //si hay algun disco en la pila
     if (a.isEmpty().Equals(false))    // si en la a pila hay algun disco
     {
         if (b.isEmpty().Equals(true)) //se observa tambien si en la pila b hay alguno
         {
             Disco disco = a.pop();    //lo quitamos de la pila a
             b.push(disco);            //y a continuacion lo ponemos en b
         }
         else //si no se da el caso anterior
         {
             if (a.Top > b.Top)         // si el ultimo disco de la pila a > ultimo disco de la pila b
             {
                 Disco disco = b.pop(); //se quita en b
                 a.push(disco);         //se anyade en a
             }
             else
             {
                 Disco disco = a.pop(); //se quita de a
                 b.push(disco);         //se pone en b
             }
         }
     }
     else if (b.isEmpty().Equals(false)) //en la pila b esta llena
     {
         if (a.isEmpty().Equals(true))   //y en la pila a esta vacia
         {
             Disco disco = b.pop();      //cambiamos de la pila b a la a el disco
             a.push(disco);
         }
         else//igual que en el caso anterior coprobamos si el disco de mas arriba es mayor al disco de a
         {
             if (b.Top > a.Top)
             {
                 Disco disco = a.pop();
                 b.push(disco);
             }
             else
             {
                 Disco disco = b.pop();
                 a.push(disco);
             }
         }
     }
 }
예제 #17
0
        /*TODO: Implementar métodos*/
        public static void mover_disco(Pila a, Pila b)
        {
            Disco discoMover = new Disco();

            if (a.isEmpty())
            {
                discoMover = b.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de B a A");
                if (discoMover.Valor != 0)
                {
                    a.push(discoMover);
                }
                return;
            }
            else if (b.isEmpty())
            {
                discoMover = a.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de A a B");
                if (discoMover.Valor != 0)
                {
                    b.push(discoMover);
                }
                return;
            }
            else if (a.Top > b.Top)
            {
                discoMover = b.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de B a A");
                if (discoMover.Valor != 0)
                {
                    a.push(discoMover);
                }
                return;
            }
            else if (b.Top > a.Top)
            {
                discoMover = a.pop();
                Console.WriteLine("Moviendo disco " + discoMover.Valor + " de A a B");
                if (discoMover.Valor != 0)
                {
                    b.push(discoMover);
                }
                return;
            }
        }
예제 #18
0
        private void AccColaRecursiva(int delimitador, ref Pila ini, ref Pila fin, ref Pila aux, ref int contador, int iteracio)
        {
            if (delimitador == iteracio)
            {
                Disco disco = ini.pop();
                fin.push(disco);
                contador++;
            }
            else
            {
                this.AccColaRecursiva(delimitador, ref ini, ref aux, ref fin, ref contador, iteracio + 1);

                Disco disco = ini.pop();
                fin.push(disco);
                contador++;

                this.AccColaRecursiva(delimitador, ref aux, ref fin, ref ini, ref contador, iteracio + 1);
            }
        }
예제 #19
0
 public void mover_disco(Pila a, Pila b)
 {
     if (a.Top < b.Top)
     {
         b.push(a.pop());
     }
     else if (a.Top > b.Top)
     {
         a.push(b.pop());
     }
 }
예제 #20
0
파일: Hanoi.cs 프로젝트: joacaar/Practica-1
        public int recursivo(int n, Pila ini, Pila fin, Pila aux)
        {
            int m = 0;

            if (n == 1)
            {
                Disco inter;
                inter = ini.pop();
                fin.push(inter);
                m++;
            }
            else
            {
                m += recursivo(n - 1, ini, aux, fin);
                Disco inter = ini.pop();
                fin.push(inter);
                m++;
                m += recursivo(n - 1, aux, fin, ini);
            }
            return(m);
        }
예제 #21
0
        public int recursivo(int delimitador, ref Pila ini, ref Pila fin, ref Pila aux)
        {
            int contador = 0;

            if (delimitador == 1)
            {
                Disco disco = ini.pop();
                fin.push(disco);
                contador++;
            }
            else
            {
                contador = contador + this.recursivo(delimitador - 1, ref ini, ref aux, ref fin);

                Disco disco = ini.pop();
                fin.push(disco);
                contador++;

                contador = contador + this.recursivo(delimitador - 1, ref aux, ref fin, ref ini);
            }
            return(contador);
        }
예제 #22
0
        public void mover_disco(Pila a, Pila b)
        {
            if (a.isEmpty() && !b.isEmpty())
            {
                // mover de B a A
                Disco dB = b.pop(); //quitar de B
                a.push(dB);         // poner en A
                Console.WriteLine("Se mueve: " + dB.Valor + " de " + b.Nombre + " a " + a.Nombre);
            }
            else if (!a.isEmpty() && b.isEmpty())
            {
                // mover de A a B
                Disco dA = a.pop(); //quitar de A
                b.push(dA);         // poner en B
                Console.WriteLine("Se mueve: " + dA.Valor + " de " + a.Nombre + " a " + b.Nombre);
            }
            else
            {
                int topA = a.Top;
                int topB = b.Top;

                if (topA > topB)
                {
                    // si a tiene una ficha mas grande se tendrá que mover de B a A
                    // mover de B a A
                    Disco dB = b.pop(); //quitar de B
                    a.push(dB);         // poner en A
                    Console.WriteLine("Se mueve: " + dB.Valor + " de " + b.Nombre + " a " + a.Nombre);
                }
                else
                {
                    // mover de A a B
                    Disco dA = a.pop(); //quitar de A
                    b.push(dA);         // poner en B
                    Console.WriteLine("Se mueve: " + dA.Valor + " de " + a.Nombre + " a " + b.Nombre);
                }
            }
        }
예제 #23
0
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            //por si hay una pila vacia
            if (a.isEmpty() && b.Top != 0)
            {
                Disco discoMovido = b.pop();
                a.push(discoMovido);

                //Console.WriteLine("discoMovido" + discoMovido.Valor);
                Console.WriteLine("MOVIMIENTO -->Disco movido con valor --> " + discoMovido.Valor);
            }
            else if (!a.isEmpty() && b.isEmpty())
            {
                Disco discoMovido = a.pop();
                b.push(discoMovido);
                Console.WriteLine("MOVIMIENTO -->Disco movido con valor --> " + discoMovido.Valor);
            }
            else
            {
                //por si estan las dos llenas se realiza una comparación
                int inicio = a.Top;
                int final  = b.Top;
                if (inicio > final)
                {
                    //de b a a
                    Disco discoMovido = b.pop();
                    a.push(discoMovido);
                    Console.WriteLine("MOVIMIENTO -->Disco movido con valor --> " + discoMovido.Valor);
                }
                else
                {
                    //de a a b
                    Disco discoMovido = a.pop();
                    b.push(discoMovido);
                    Console.WriteLine("MOVIMIENTO -->Disco movido con valor --> " + discoMovido.Valor);
                }
            }
        }
예제 #24
0
 /*Implementación de metodos*/
 public void mover_disco(Pila a, Pila b)
 {
     if ((a.Top > b.Top || a.Top == 0) && b.Top != 0)
     {
         a.push(b.pop());
         direccion = 1;
     }
     else if ((b.Top > a.Top || b.Top == 0) && a.Top != 0)
     {
         b.push(a.pop());
         direccion = 2;
     }
     m++;
 }
예제 #25
0
        int movimientos = 0;                    // Variable global movimientos inicializada en 0 que almacena la cantidad de movimientos que se realiza

        public void mover_disco(Pila a, Pila b) // Método mover_disco que se le pasan dos pilas que es a las que se va a hacer el movimiento
        {
            if (a.Top < b.Top)                  // Si el disco superior de la pila a es menor que el de la b el movimiento se hace de a a b
            {
                Disco d = a.pop();
                b.push(d); // Aquí se hace el movimiento con los métodos push y pop de la clase pila
                Console.WriteLine("El disco " + d.valor + " se mueve de la " + a.nombre + " a la " + b.nombre);
            }
            else // En caso de que el disco superior de b sea menor que el de a, el movimiento se hace de la pila a b la pila a
            {
                Disco d = b.pop();
                a.push(d); // Aquí se hace el movimiento con los métodos push y pop de la clase pila
                Console.WriteLine("El disco " + d.valor + " se mueve de la " + b.nombre + " a la " + a.nombre);
            }
        }
예제 #26
0
        public void mover_disco(Pila a, Pila b)
        {
            bool mov_a_b;
            bool mov_b_a;

            if (b.isEmpty() == true)
            {
                mov_b_a = false;
                mov_a_b = true;
                Console.WriteLine("Muevo el disco " + a.Top + " desde " + a.Name + " hasta " + b.Name);
            }
            else if (a.isEmpty() == true)
            {
                mov_a_b = false;
                mov_b_a = true;
                Console.WriteLine("Muevo el disco " + b.Top + " desde " + b.Name + " hasta " + a.Name);
            }
            else if (a.Top < b.Top && b.isEmpty() == false)
            {
                mov_b_a = false;
                mov_a_b = true;
                Console.WriteLine("Muevo el disco " + a.Top + " desde " + a.Name + " hasta " + b.Name);
            }
            else if (a.Top > b.Top && a.isEmpty() == false)
            {
                mov_a_b = false;
                mov_b_a = true;
                Console.WriteLine("Muevo el disco " + b.Top + " desde " + b.Name + " hasta " + a.Name);
            }
            else
            {
                mov_b_a = false;
                mov_a_b = false;
                Console.WriteLine("No Puedo mover");
            }

            if (mov_a_b == true && mov_b_a == false)
            {
                b.push(a.Elementos[a.Size - 1]);
                a.pop();
            }
            else if (mov_b_a == true && mov_a_b == false)
            {
                a.push(b.Elementos[b.Size - 1]);
                b.pop();
            }
        }
예제 #27
0
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            if (a.Top > b.Top)
            {
                Disco disco = b.Elementos[b.Size];
                b.pop();

                a.push(disco);
            }
            else
            {
                Disco disco = a.Elementos[a.Size];
                a.pop();

                b.push(disco);
            }
        }
예제 #28
0
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            if (a.peek() != 99)//si es 99 la pila esta vacia
            {
                Disco movido = a.pop();
                b.push(movido);
            }

            else
            {
                if (b.peek() != 99)//si es 99 la pila esta vacia
                {
                    Disco movido = b.pop();
                    a.push(movido);
                }
            }
        }//mover_disco
예제 #29
0
        /*TODO: Implementar métodos*/
        public void mover_disco(Pila a, Pila b)
        {
            Disco discoAux = new Disco();

            if (pilaFIN.getNumDiscos() != n || pilaAUX.getNumDiscos() != n)
            {
                if (comprobarMovimiento(a, b).Equals("C"))
                {
                    return;
                }
                if (comprobarMovimiento(a, b).Equals("A"))
                {
                    discoAux = a.pop();
                    b.push(discoAux);
                    numMovimientos++;
                }
                else
                {
                    discoAux = b.pop();
                    a.push(discoAux);
                    numMovimientos++;
                }
            }
        }
예제 #30
0
        static void Main(string[] args)
        {
            Pila ini = new Pila();
            Pila aux = new Pila();
            Pila fin = new Pila();

            Hanoi juego = new Hanoi();

            //Número de discos con los que se va a jugar
            int numero = 3;

            Console.WriteLine("********************************************************************************");
            Console.WriteLine("             ALGORITMO ITERATIVO");
            Console.WriteLine("********************************************************************************");

            int movimientos = juego.iterativo(numero, ini, fin, aux);

            Console.WriteLine("El número de movimientos es: " + movimientos + ".");

            if (movimientos == Math.Pow(2, numero) - 1)
            {
                Console.WriteLine("El juego es correcto.");
            }

            Console.WriteLine();

            //Una vez terminado el algoritmo iterativo, borro los discos introducidos en
            //la pila final para volver a reutilizarla antes de empezar el siguiente algoritmo
            for (int i = numero; i > 0; i--)
            {
                fin.pop();
            }

            Console.WriteLine("********************************************************************************");
            Console.WriteLine("             ALGORITMO RECURSIVO");
            Console.WriteLine("********************************************************************************");

            //Creación e introducción de los discos en la pila inicial
            for (int i = numero; i > 0; i--)
            {
                ini.push(new Disco(i));
            }

            //Imprimir los elementos del disco
            for (int i = 0; i <= ini.Elementos.Count - 1; i++)
            {
                Console.WriteLine("Valores de los discos en la pila ini[" + i + "]: " + ini.Elementos[i].Valor);
            }

            Console.WriteLine();
            Console.WriteLine("Número de discos en las pilas => INI: " + ini.Size + " AUX: " + aux.Size + " FIN: " + fin.Size);
            Console.WriteLine("TOP en las pilas => INI: " + ini.Top + " AUX: " + aux.Top + " FIN: " + fin.Top);
            Console.WriteLine();
            Console.WriteLine("EMPIEZA EL JUEGO");

            int movimientosR = juego.recursivo(numero, ini, fin, aux);

            Console.WriteLine("________________________________________________________________________________");
            Console.WriteLine("El número de movimientos es: " + movimientosR + ".");

            if (movimientosR == Math.Pow(2, numero) - 1)
            {
                Console.WriteLine("El juego es correcto.");
            }

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }