Hola, tengo aquí el programa de un compañero de clase, el programa pide un número en decimal y te lo muestra en binario, y se tiene que hacer obligatoriamente utilizando un método recursivo.
Pero por más que miro el código, no lo entiendo...
{
class Recursividad01
{
static void Main(string[] args)
{
Recursividad01 ObjRecursivo = new Recursividad01();
try
{
int numero;
// Introducimos el numero en decimal.
Console.Write("Introduce un numero decimal positivo: ");
numero = Convert.ToInt32(Console.ReadLine());
// Comprobamos que sea positivo.
if (numero < 0) Console.Write("ERROR. El numero debe ser positivo \n");
else
{
// Lo enviamos al metodo Abinario para que lo calcule.
ObjRecursivo.Abinario(numero);
// Añadimos linea en blanco despues de presentar los numeros.
Console.WriteLine("");
}
}
catch (Exception texto)
{
Console.Write("ERROR. {0}", texto);
}
}
public void Abinario(int numero)
{
int cociente, resto;
cociente = numero / 2;
resto = numero % 2;
if (cociente != 0) // Si no finalizamos la division lo enviamos al metodo de nuevo.
{
Abinario(cociente);
}
Console.Write(resto);
}
}
}
A ver, el método principal pide el número en decimal, y lo envía al método Abinario,
este lo divide entre dos, calcula el resto de la división, y si el cociente no es cero, vuelve a llamar al método y le entrega el número dividido.
Hasta ahí bien, pero me surge la duda cuando el cociente se hace cero, y el programa escribe el "resto".
No se supone que cada vez que el bucle empieza, el valor del resto toma un nuevo valor? el que haya dejado la división en ese momento?
Por ejemplo, metemos el número 2.
2/2; cociente= 1, resto = 0,
cociente es distinto de 0, así que volvemos a hacer el método.
1/2; cociente= 0, resto =1,
cociente es 0, así que ya no vuelve a llamarse el método, y se escribe el resto, que en este momento es 1.
Así es como yo entiendo el proceso, pero el programa me devuelve un "10", es decir, coje el último resto y me lo muestra junto con el que había cogido anteriormente, pero no soy capaz de ver como hace eso..
A ver si alguien tiene moral y ganas para explicarlo
Un saludo.